如何将两个参数传递给具有单参数签名的方法?

时间:2009-09-16 20:52:33

标签: ruby proc-object arity

s = Proc.new {|x|x*2}

def one_arg(x)
  puts yield(x)
end

one_arg(5, &s)

one_arg如何了解&s

2 个答案:

答案 0 :(得分:3)

&运算符将Proc转换为块,因此它成为带有块的单参数方法(使用yield调用)。如果您已经离开&以便它直接通过了Proc,那么您将会遇到错误。

答案 1 :(得分:3)

通过执行&s,您告诉one_arg您希望将Proc s作为一个块传递(如果我错了,请纠正我)。等效的写作将是

one_arg(5) do |x|
  x *2
end

关于这个问题,最近有一些关于SO的问题。 August Lilleaas对于所有这些Ruby疯狂的复杂性有一个非常好的write up