ruby语法 - ruby中“&:”运算符的功能是什么?
ruby数组赋值 (2)
可能重复:
map(&:name)在Ruby中意味着什么?
我遇到了一个代码片段,其中包含以下内容
a.each_slice(2).map(&:reverse)
我不知道&:
运算符的功能。 这是如何运作的?
https://src-bin.com
Answer #1
Ruby中没有&:
运算符。 您所看到的是&
运算符应用于: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)
Answer #2
通过在符号前面加上你正在创建一个lambda函数,该函数将在传递给该函数的对象上调用带有该符号名称的方法。 考虑到这一点:
ar.map(&:reverse)
大致相当于:
ar.map { |element| element.reverse }