From: Masatoshi SEKI Date: 2001-01-21T06:43:13+09:00 Subject: [ruby-list:27268] Re: break from proc-closure 咳といいます。 > > Proc中でのbreakはyield(=Proc#call)の即時終了を意味し、異常系 > > ではないので例外は発生しません。ってのは助けにならないでしょ > > うねえ。どうしましょう? > > 1.4系だと # だったと > 思います。 > > > |---- > > |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 > > |---- > > > > このプログラムがどう動くべきなのかよくわからないのですが。 > > # を返して欲しいよう。(;_;) > eval.cの中もそれらしく書いてあるし。(たぶん) すみません、すみません。いま1.4.6を探してきて試験しました。 このプログラムでは 1.4.6 で観測できませんでした。 begin .. rescue .. end を Thread にすると観測できます。# dRubyではこうしてた proc = Proc.new do |n| p n break if n == :break retry if n == :retry end th = Thread.new do begin proc.call(:retry) rescue LocalJumpError p $! #=> # end end th.join th = Thread.new do begin proc.call(:break) rescue LocalJumpError p $! #=> 1.4.6 # #=> 1.6.2 ?? end end th.join --- 1.4.6 の結果 ruby 1.4.6 (2000-08-16) [i586-linux] 8609 # 8601 # --- 1.6.2 の結果 ruby 1.6.2 (2000-12-25) [i586-linux] :retry # :break