当* args在ruby中传递给yield时会发生什么,在capture_helper.rb中我看到一个语句,其中* args被传递给yield语句,当我们这样做时实际发生了什么。
buffer = with_output_buffer { value = yield(*args) }
其中第一个参数是构建器对象,第二个参数是传递的块
答案 0 :(得分:2)
使用*
运算符(splat operator)为变量添加前缀(必须是数组或散列),提取数组的值:
ary = [1, 2, 3]
def foo(a, b, c)
a + b + c
end
foo(ary)
# => ArgumentError: wrong number of arguments (given 1, expected 3)
foo(*ary)
# 6
与yield
完全相同,只是将值传递给块:
def bar
ary2 = [5, 6]
yield(*ary2)
end
bar do |x, y|
puts x + y
end
# 11