ruby中“&:”运算符的function是什么?
可能重复:
在Ruby中map(&:name)是什么意思?
我遇到了一个代码片段,有以下几点
a.each_slice(2).map(&:reverse)
我不知道&:
操作符的function。 这是如何工作的?
Ruby中没有&:
操作符。 你所看到的是应用于:symbol
的&
运算:symbol
。
在一个方法参数列表中, &
操作符取其操作数,如果它还没有(通过调用to_proc
)将其转换为Proc
对象,并将其传递给该方法,就像已经使用了一个块一样。
my_proc = Proc.new { puts "foo" } my_method_call(&my_proc) # is identical to: my_method_call { puts "foo" }
所以现在的问题变成了“ Symbol#to_proc
做什么?”,这在Rails文档中很容易看到:
将符号变成一个简单的proc,这对枚举特别有用。 例子:
# The same as people.collect { |p| p.name } people.collect(&:name) # The same as people.select { |p| p.manager? }.collect { |p| p.salary } people.select(&:manager?).collect(&:salary)
通过在符号前面加上一个符号,你正在创build一个lambda函数,它将在你传递给这个函数的对象上调用这个符号的名字。 考虑到这一点:
ar.map(&:reverse)
大致相当于:
ar.map { |element| element.reverse }