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 }