当* args在ruby中传递给yield时会发生什么

时间:2016-12-05 07:37:44

标签: ruby-on-rails ruby yield form-for

当* args在ruby中传递给yield时会发生什么,在capture_helper.rb中我看到一个语句,其中* args被传递给yield语句,当我们这样做时实际发生了什么。

 buffer = with_output_buffer { value = yield(*args) }

其中第一个参数是构建器对象,第二个参数是传递的块

1 个答案:

答案 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