小编Ale*_*yne的帖子

如何允许Ruby别名的语法?

这个让我在晚上待了一会儿.

class Foo
  def bar
    'bar'
  end

  # What the hell is going on here?!?
  alias :baz :bar
end

Foo.new.baz #=> 'bar'
Run Code Online (Sandbox Code Playgroud)

为什么alias将2个符号作为参数,但没有用逗号分隔它们?在任何其他上下文中,这似乎不是任何形式的有效语法.事实上,如果你使用逗号,它实际上会抛出语法错误.

alias :bar, :baz
# syntax error, unexpected ','
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试以相同的方式将2个符号传递给我自己的方法,它也会爆炸:

def somemethod(*args)
  :whatever
end
somemethod :a :b
# syntax error, unexpected ':', expecting $end
Run Code Online (Sandbox Code Playgroud)
  1. 那么为什么该alias方法可以使用其他任何东西都不能使用的语法?
  2. 是否可以在任何其他上下文中使用此语法?
  3. 使用这种奇怪的语法怪癖有什么好处,当语言中的其他内容没有这种方式工作时?我认为这种语言不一致没有明显的好处.

ruby

12
推荐指数
2
解决办法
2865
查看次数

将两个字符串转换为布尔数组的快速方法是什么?

我有一个长字符串(有时超过1000个字符),我想转换为布尔值数组.它需要很快完成这么多次.

let input: String = "001"
let output: [Bool] = [false, false, true]
Run Code Online (Sandbox Code Playgroud)

我天真的尝试是这样的:

input.characters.map { $0 == "1" }
Run Code Online (Sandbox Code Playgroud)

但这比我想要的要慢很多.我的分析告诉我,这map是减速的地方,但我不确定我能做多少简单.

如果没有Swift/ObjC的开销,我觉得这会很快.在C中,我认为这是一个简单的for循环,其中一个字节的内存与一个常量进行比较,但我不确定我应该看到的函数或语法是什么.

有没有办法更快地做到这一点?

更新:

我也试过了

output = []
for char in input.characters {
    output.append(char == "1")
}
Run Code Online (Sandbox Code Playgroud)

它的速度提高了约15%.我希望远不止这些.

ios swift

12
推荐指数
2
解决办法
1140
查看次数

Javascript用空格替换字符

我需要从网址获取页面的名称.我是这样做的:

var filename = window.location.href.substr(window.location.href.lastIndexOf('/')+1)
// -> 'state.aspx' 

var statelookup = filename.substr(0, filename.lastIndexOf('.'))
// -> 'state'
Run Code Online (Sandbox Code Playgroud)

现在,例如,我的s​​tatelookup有一个像New-York或North-Carolina的值,我如何用中间的空格替换连字符?

javascript

11
推荐指数
1
解决办法
2万
查看次数

MobileSafari不会发回使用CORS设置的Cookie

我在MobileSafari中加载了一个页面,它通过CORS与另一台服务器通信.

在桌面浏览器(经过测试的Chrome和Safari)中,我可以登录,获取会话cookie,并将该会话cookie发回给后续请求,以便我可以通过所有API调用进行身份验证.

然而,当我通过移动Safari浏览器登录时,该cookie并没有得到发回后续请求.

我正在使用Charles Proxy监视正在发生的事情,它告诉我:

  1. POST https://myremoteserver.com/sessions.json 传递我的登录信息
  2. 它成功并收到带有效Set-Cookie标头的响应.
  3. GET https://myremoteserver.com/checkout.json请求,没有Cookie请求标头.
  4. 服务器响应就好像我没有登录一样.

我正在使用此代码段Zepto.js以确保withCredentials: true在XHR对象上正确设置.(原谅coffeescript)

# Add withCredentials:true to the xhr object to send the remote server our cookies.
xhrFactory = $.ajaxSettings.xhr
$.ajaxSettings.xhr = ->
  xhr = xhrFactory.apply(this, arguments)
  xhr.withCredentials = yes
  xhr
Run Code Online (Sandbox Code Playgroud)

并且该代码段在桌面浏览器中运行良好,在我添加之前,我无法在这些桌面浏览器中保留会话cookie.

MobileSafari中有一些怪癖阻止它像桌面浏览器一样工作吗?为什么它不能以同样的方式工作?


编辑!

这是我的rails 2.3应用程序中的我的CORS标题设置,我相信相当标准的东西

def add_cors_headers
  if valid_cors_domain
    headers['Access-Control-Allow-Origin']      = request.headers['HTTP_ORIGIN']
    headers['Access-Control-Expose-Headers']    = 'ETag'
    headers['Access-Control-Allow-Methods']     = 'GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD'
    headers['Access-Control-Allow-Headers']     = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match' …
Run Code Online (Sandbox Code Playgroud)

javascript ajax cors coffeescript ios

11
推荐指数
1
解决办法
4295
查看次数

iPhone可以检测触摸的大小吗?

据我所知,iPhone多点触控框架发送的每个触摸的位置,但不是大小.

我希望允许用户用拇指尖点击按钮,或者将拇指垫放在多个按钮(不是真正的UIButton)上,让我的触摸跟踪代码意识到它需要按下拇指上的所有按钮过度.

cocoa-touch

10
推荐指数
2
解决办法
2408
查看次数

Javascript:转发带有可变数量参数的函数调用

我想我需要像ruby's splat这样的东西*.

function foo() {
  var result = '';
  for (var i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}

function bar() {
  return foo(arguments) // this line doesn't work as I expect
}

bar(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

我希望这回来"123",但我得到了"[object Arguments]".我认为这是有道理的.它传递的是表示参数的对象,而不是单独的参数.

那么我如何简单地将任意数量的参数转发给另一个带有任意数量参数的函数呢?

javascript arguments

10
推荐指数
1
解决办法
5314
查看次数

GLSL:找不到我的自定义功能

所以我有这个片段着色器,它工作得很好,直到我将一些逻辑重构成一个单独的函数.我希望能够多次调用它来将不同版本的效果叠加在一起.

但是,一旦我创建了这个自定义函数,着色器就会开始抛出错误:

ERROR: 0:33: 'grid' : no matching overloaded function found 
Run Code Online (Sandbox Code Playgroud)

哪个是奇怪的,因为它似乎正在将其编译为函数.如果我删除了returngrid()我得到这个错误太:

ERROR: 0:36: '' : function does not return a value: grid
Run Code Online (Sandbox Code Playgroud)

那么我在这里想到的关于声明函数的内容是什么?

完整着色器:

uniform float brightness;
uniform float shiftX;
uniform float shiftY;

uniform vec4 color;
varying vec3 vPos;

void main() {
  gl_FragColor = vec4( grid(200.0), 0.0, 0.0, 1.0 );
}

float grid(float size) {
  float x = pow(abs(0.5 - mod(vPos.x + shiftX, 200.0) / 200.0), 4.0);
  float y = pow(abs(0.5 - mod(vPos.y + shiftY, …
Run Code Online (Sandbox Code Playgroud)

glsl webgl three.js

10
推荐指数
1
解决办法
6889
查看次数

Rails ActiveAdmin:在同一视图中显示相关资源的表

show使用Rails的ActiveAdmin宝石荷兰国际集团的资源,我想告诉另一关联模型的表.

所以,让我们说一个Winery has_many :products.现在我想显示管理资源show页面上关联的产品Winery.而且我希望这是一个类似于我indexProducts资源的表格.

我让它工作,但只能通过手动重新创建HTML结构,哪种糟糕.是否有更index简洁的方法为关联资源的特定子集创建表格样式视图?

我有什么,有点糟糕:

show title: :name do |winery|
  attributes_table do
    row :name
    row(:region) { |o| o.region.name }
    rows :primary_contact, :description
  end

  # This is the part that sucks.
  div class: 'panel' do
    h3 'Products'
    div class: 'attributes_table' do
      table do
        tr do
          th 'Name'
          th 'Vintage'
          th 'Varietal'
        end
        winery.products.each do |product|
          tr do
            td link_to product.name, admin_product_path(product)
            td product.vintage
            td product.varietal.name
          end …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails activeadmin

10
推荐指数
1
解决办法
1万
查看次数

打字稿:onPress 类型

我刚刚将我的 react-native 项目移植到 typescript 并且有一个关于函数作为道具的问题

我通过:

<DisplayCardsWithLikes
data={testData}
likes={500}
onPress={() => this.props.navigation.navigate("CardDetailScreen")}
/>
Run Code Online (Sandbox Code Playgroud)

type Props = {
  onPress: Function
}


const FloatingActionButtonSimple = (props:Props) => {
  const {onPress} = props
  return (
    <View style={styles.containerFab}>
      <TouchableOpacity style={styles.fab} onPress={onPress}>
        <Icon name="plus" size={16} color={"white"} />
      </TouchableOpacity>
    </View>
  );
};
Run Code Online (Sandbox Code Playgroud)

错误:

Error, caused by child onPress:
o overload matches this call.
  Overload 1 of 2, '(props: Readonly<TouchableOpacityProps>): TouchableOpacity', gave the following error.
    Type 'Function' is not assignable to type '(event: GestureResponderEvent) => void'. …
Run Code Online (Sandbox Code Playgroud)

typescript react-native

10
推荐指数
2
解决办法
7182
查看次数

Typescript 中的 never 类型如何工作?

我经常偶然发现neverTypeScript 中的类型。虽然我已经阅读了文档,浏览了有关 SO 的现有问题 - 我的理解仍然不是很好。我希望得到一些帮助,以便更好地理解它。下面是 TS 文档中的一个让我头晕的例子:

type GetReturnType<Type> = Type extends (...args: never[]) => infer Return
  ? Return
  : never;

type Num = GetReturnType<() => number>;

type Str = GetReturnType<(x: string) => string>;

type Bools = GetReturnType<(a: boolean, b: boolean) => boolean[]>;
Run Code Online (Sandbox Code Playgroud)

我的理解是,指定(...args: never[]) => ...意味着创建一个不接受任何参数的函数签名(为什么never[]?)。然而StrBools都是带参数的函数签名(这个错误不应该吗?)。

我也在努力理解条件类型:infer Return ? Return : never。对我来说,这意味着该函数要么有返回值,要么编译器应该产生错误。但我不确定。

typescript

10
推荐指数
2
解决办法
3889
查看次数