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 疯狂的错综复杂的文章。