From: matz@... (Yukihiro Matsumoto) Date: 2001-01-21T00:26:53+09:00 Subject: [ruby-list:27263] Re: break from proc-closure まつもと ゆきひろです In message "[ruby-list:27253] break from proc-closure" on 01/01/20, Masatoshi SEKI writes: |= 質問のまとめ。 | |ProcがretryやbreakしたことをLocalJumpErrorで捕まえることで |dRubyのブロック付きメソッドを実現していました。 | |1.6.2でProcがbreakしたことを知る方法はありますか? |(retryはLocalJumpErrorが発生するので知ることができました。) Proc中でのbreakはyield(=Proc#call)の即時終了を意味し、異常系 ではないので例外は発生しません。ってのは助けにならないでしょ うねえ。どうしましょう? |---- |proc = Proc.new do |n| | p n | break if n == :break | retry if n == :retry |end | |begin | proc.call(:retry) |rescue | p $! #=> # |end | |begin | proc.call(:break) |rescue | p $! #=> ?? |end |---- このプログラムがどう動くべきなのかよくわからないのですが。 |それからブロック付きメソッドにブロックを書いてもProcを渡しても |ほぼ同じように動くとおもっていたのですが、勘違いでしょうか ? |(自信ない…) いや、勘違いじゃないです。 |a.rb:10: unexpected break" というのはなんでしょう? 例外ではない ?? トップレベルにbreakが突き抜けちゃったときのメッセージですね。 これはバグっぽいです。 まつもと ゆきひろ /:|)