s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
怎么one_arg知道&s?
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
怎么one_arg知道&s?
运算符将&Proc 变成一个块,因此它成为一个带有块的单参数方法(用 调用yield)。如果你没有&让它直接通过 Proc,你会得到一个错误。
通过执行&s,您是在告诉one_arg您希望您的 Procs作为一个块传递(如果我错了,请纠正我)。等效的写作将是
one_arg(5) do |x|
x *2
end
到目前为止,这里有一些关于 SO 的问题与此有关。August Lilleaas写了一篇关于所有这些 Ruby 疯狂的错综复杂的文章。