Ruby 中参数前面的 & 有何作用?

Pen*_*nny 7 ruby variables arguments ruby-on-rails

我正在做一些 Ruby Koan 练习。由于我是一个新手,所以有些代码对我来说似乎没有意义。例如,&参数前面的

def method_with_explicit_block(&block)
    block.call(10)
end

def test_methods_can_take_an_explicit_block_argument
assert_equal 20, method_with_explicit_block { |n| n * 2 }

add_one = lambda { |n| n + 1 }
assert_equal 11, method_with_explicit_block(&add_one)
end
Run Code Online (Sandbox Code Playgroud)

&为什么前面有一个blockand add_one?使它们成为全局变量还是将它们引用到前面的变量?

谢谢你!

Jör*_*tag 6

在方法定义中的参数前面,一元前缀与&符号的含义是:将传递给该方法的块打包为适当的Proc对象。

在方法调用中的参数前面,一元前缀 & 运算符&的意思是:Proc通过向其发送消息to_proc(除非它已经是 a Proc),将作为参数传递的对象转换为 a ,并将其“展开”到一个块中,即将 aProc视为如果它是直接作为块传递的话。