6

ルビーでは、

begin
  # ...
rescue
  # ...
end

のサブクラスではない例外をキャッチしませんStandardError。Cでは、

rb_rescue(x, Qnil, y, Qnil);

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }

同じことをします。rescue Exception => eruby C エクステンションから (単に ではなく)どうすればよいrescue => eですか?

4

1 に答える 1

5

Ruby にはさらに多くのドキュメントが必要です。ruby のソースコードを調べる必要がありましたが、これが私が見つけたものです:

VALUE
rb_rescue(VALUE (* b_proc)(ANYARGS), VALUE data1,
      VALUE (* r_proc)(ANYARGS), VALUE data2)
{
    return rb_rescue2(b_proc, data1, r_proc, data2, rb_eStandardError,
              (VALUE)0);
}

だから、私の質問への答えは(私が推測する)次のようになります:

rb_rescue2(x, Qnil, y, Qnil, rb_eException, (VALUE)0);

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
于 2010-07-09T22:23:17.430 に答える