我在做红宝石功因为我是个新手,所以有些代码对我来说似乎没有意义例如,参数前面的&
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
为什么在
&
和block
之前会有一个add_one
使它们成为全局变量还是引用上一个变量?谢谢您!
最佳答案
在方法定义中的参数前面,一元前缀与号表示:将传递给此方法的块打包为一个适当的对象。
在方法调用中的参数前面,一元前缀与号&
运算符表示:通过发送消息Proc
(除非已经是&
)将作为参数传递的对象转换为Proc
,并将其“展开”为块,即将to_proc
视为直接作为块传递。