Ruby中的棘手运算符

Ant*_*nAL 3 ruby

我知道Ruby有很多有用的运算符,比如 ||=

它有什么其他棘手的操作员?

我没有找到任何参考资料.

ebe*_*and 5

方法签名末尾的&符将抓住并期待一个块.

def foo(bar, &block)  
   block.call (bar += 1)  
end
Run Code Online (Sandbox Code Playgroud)

&符号也可以用这种形式调用to_proc,让你:address用符号调用方法(例子是从别处借来的)

@webs ||= Web.find(:all).index_by &:address
Run Code Online (Sandbox Code Playgroud)

快捷方式喜欢+=-=方便.

不是运营商,而是Rails提供的另一种快捷方式.这将让你栏时,foo是要么nil?false

a = foo || bar
Run Code Online (Sandbox Code Playgroud)

在"运算符"方面,我在这里找到了一个(非官方的)东西供参考:Ruby运算符


Séb*_*nec 5

我发现splat运算符是最棘手的Ruby运算符之一:

它拆分数组:

a,b,c = *[1,2,3]
Run Code Online (Sandbox Code Playgroud)

或者构建一个数组:

*a = 1,2,3
Run Code Online (Sandbox Code Playgroud)

它也可以在case声明中使用:

first = ["one", "two"]
second = ["three", "four"]

case number
  when *first
    "first"
  when *second
    "second"
end
Run Code Online (Sandbox Code Playgroud)

它可以用作varargs的函数参数:

def stuff *args
   args.join('|')
end
Run Code Online (Sandbox Code Playgroud)

由于它用于两者(拆分和创建数组),我总是必须在使用它之前检查语法.它可以用于很多目的(比如将哈希转换为数组),我觉得很难掌握.

  • 该运算符的另一个有趣用途是部分列表解包,例如,`a,*b = [1,2,3]`,在这种情况下,`b`设置为`[2,3]`. (2认同)