[#21338] $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

21 messages 2003/09/04
[#21346] Re: $SAFE=4 での autoload — nobu.nakada@... 2003/09/04

なかだです。

[#21359] Re: $SAFE=4 での autoload — Hidetoshi NAGAI <nagai@...> 2003/09/05

永井@知能.九工大です.

[#21419] Makefile.inのlex.c — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

15 messages 2003/09/28

[ruby-dev:21439] Re: break from block yielded in until

From: Tietew <tietew-ml-ruby-dev@...>
Date: 2003-09-30 07:19:56 UTC
List: ruby-dev #21439
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


In This Thread