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 をブロックに変換するため、ブロックを持つ 1 つの引数のメソッドになります (これは で呼び出されyieldます)。を&省略して Proc を直接渡すと、エラーが発生します。

于 2009-09-16T20:55:53.193 に答える
3

を実行することで、Proc をブロックとして渡したいということになります&s(間違っていたら訂正してください)。同等の記述は次のようになりますone_args

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

これに対処する最近の SO に関するいくつかの質問がありました。August Lilleaasは、この Ruby の狂気すべての複雑さのいくつかについて、非常に素晴らしい記事を書いています。

于 2009-09-16T20:57:36.407 に答える