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

def one_arg(x)
  puts yield(x)
end

one_arg(5, &s)

怎么one_arg知道&s

4

2 回答 2

3

运算符将&Proc 变成一个块,因此它成为一个带有块的单参数方法(用 调用yield)。如果你没有&让它直接通过 Proc,你会得到一个错误。

于 2009-09-16T20:55:53.193 回答
3

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

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

到目前为止,这里有一些关于 SO 的问题与此有关。August Lilleaas写了一篇关于所有这些 Ruby 疯狂的错综复杂的文章。

于 2009-09-16T20:57:36.407 回答