我在做红宝石功因为我是个新手,所以有些代码对我来说似乎没有意义例如,参数前面的&

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视为直接作为块传递。

09-10 00:33
查看更多