使用Ruby 2.0.0p247
说我有def
:
def foo (a, b, &block):
bar[[a, b]] = block
end
如果我在此函数中使用splat
参数,如何编写块参数?
e.g。
params = [:a, [:2], { |m| m.oo }] # syntax error, unexpected '|', expecting '}'
foo(*params) # how do I make this work?
答案 0 :(得分:2)
你必须像这样传递:
params = [:a, [:2]]
block = lambda { |m| m.oo }
foo(*params, &block)
这里有一些事情:
如果绝对需要将它放在一个数组中,(我认为)你可以这样做:
params = [:a, [:2], lambda { |m| m.oo }]
foo(*(params[0..-1]), &(params.last))
如果你可能有或没有阻止,最容易改变foo:
def foo (a, b, block = nil):
bar[[a, b]] = block
end
删除&你不能再像这样打电话给foo了:
foo(a,b) {|m| m.oo}
但您可以使用您在问题中初步显示的表单:
params = [:a, [:2], lambda { |m| m.oo }]
foo(*params)
或者像这样:
foo(:a, [:2], lambda { |m| m.oo })
如果您没有提供阻止,则默认为零。