From: matz@... (Yukihiro Matsumoto) Date: 2001-01-21T01:38:49+09:00 Subject: [ruby-list:27265] Re: break from proc-closure まつもと ゆきひろです In message "[ruby-list:27263] Re: break from proc-closure" on 01/01/21, Yukihiro Matsumoto writes: ||それからブロック付きメソッドにブロックを書いてもProcを渡しても ||ほぼ同じように動くとおもっていたのですが、勘違いでしょうか ? ||(自信ない…) | |いや、勘違いじゃないです。 あ、でもちょっと間違いあるかも。 -- proc = Proc.new do |n| puts n break if n == 3 # ←を retry にすると LocalJumpError end (1..5).each(&proc) puts 'done' -- っちゅー話でしたよね。 (1..5).each(&proc) は現実には (1..5).each{|x|proc.call(x)} のようなもので、procでのbreakは「eachのブロックに対するbreak」 ではなく「そのレベルにおけるbreak」と解釈されます。これは、 Procは「その場所における挙動を保存する」という原則によります。 ですから、procを実行するとトップレベルでのbreakが発生し、そ れに対応するメッセージが出力される、と。というわけで、この動 作そのものは仕様通りです。仕様そのものがおかしいという話は受 け付けます。 別の話(irbでorphanと勘違いする話)と混同してました。 まつもと ゆきひろ /:|)