From: m_seki@... Date: 2002-06-17T05:42:05+09:00 Subject: [ruby-dev:17471] break from proc-closure 咳といいます ruby 1.6.7のCVS版の方で dRuby のUnitTestが通らなくなりました。 いつころからかはっきり分からないですが、ruby 1.6.7 (2002-03-19)はOKで (2002-06-04)では失敗します。 procからのbreakでLocalJumpErrorが発生する条件が変わったのだと思うの ですが、LocalJumpErrorはどういうときに発生するでしょうか ? --- dRubyでの問題のコードはこんな感じ。 aryにはprocに渡したい引数、objにはyieldしたいProcです。 ary.collect(&obj)[0] 従来は、proc(ここではobj)がLocalJumpErrorを発生するのを期待して breakを検知していましたが、ある条件ではcollectがnilを返すようです。 (条件は不明) collectがnilを返すことがある、ということに依存すると次のように 対応できるのですが、ちょっと気になるので…。 def obj_send(obj, msg_id, *argv) if Proc === obj && msg_id == :yield_call if argv.size == 1 ary = argv else ary = [argv] end # FIXME ary.collect(&obj)[0] it = ary.collect(&obj) raise(LocalJumpError, 'break from proc-closure') if it.nil? it[0] else obj.__send__(msg_id, *argv) end end