From: Tietew Date: 2003-09-30T16:19:56+09:00 Subject: [ruby-dev:21439] Re: break from block yielded in until On Tue, 30 Sep 2003 09:23:14 +0900 In article <1064881393.170219.18161.nullmailer@picachu.netlab.jp> [[ruby-dev:21436] Re: break from block yielded in until] matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > |break がブロックではなく until を抜けているようです。 > |この現象が起こるのは内部ループに while/until を使ったときだけで、 > |イテレータだと起こりません。 > > 直しておきました。 これに関連すると思うのですが,拡張ライブラリで rb_catch してから rb_yield していると,つまり,以下のようなコードを C で書いてある と,break がブロックを抜けずに rb_catch で止まってしまいます。 Ruby で書いてあると大丈夫で,C で書いてあると止まるようです。 rb_iterate の場合だとどうなるのかは試していません。 def find(parent, &block) ary = (parentの子要素を得る) i = 0 while i < ary.size elt = ary[i] catch(:prune) do yield elt find(elt, &block) end # => 下の break がここにジャンプする i += 1 end end find(".") { |elt| break } —[ Tietew ]—————————————————————————— メ : tietew@tietew.net / tietew@raug.net / tietew@masuclub.net ホペ: http://www.tietew.net/ Tietew Windows Lab. http://www.masuclub.net/ 鱒倶楽部 指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA