ruby中“&amp ;:”运算符的功能是什么?

时间:2012-02-24 11:16:31

标签: ruby

  

可能重复:
  What does map(&:name) mean in Ruby?

我遇到了一个代码片段,其中包含以下内容

a.each_slice(2).map(&:reverse)

我不知道&:运营商的功能。这是如何运作的?

2 个答案:

答案 0 :(得分:75)

Ruby中没有&:运算符。您看到的是应用于&的{​​{1}}运算符。

在方法参数列表中,:symbol运算符获取其操作数,如果尚未将其转换为&对象(通过调用Proc)并传递它该方法就像使用了一个块一样。

to_proc

现在问题变成“my_proc = Proc.new { puts "foo" } my_method_call(&my_proc) # is identical to: my_method_call { puts "foo" } 做了什么?”,这在the Rails documentation中很容易看到:

  

将符号转换为简单的proc,这对枚举特别有用。例子:

Symbol#to_proc

答案 1 :(得分:22)

通过将&添加到符号中,您将创建一个lambda函数,该函数将在您传递给此函数的对象上调用带有该符号名称的方法。考虑到这一点:

ar.map(&:reverse)

大致相当于:

ar.map { |element| element.reverse }