Ruby cの拡張機能:StandardErrorsではないものを含むすべての例外をキャッチするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/3216769

質問

ルビで,

begin
  # ...
rescue
  # ...
end

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

rb_rescue(x, Qnil, y, Qnil);

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

同じことをします。どうすればいいですか rescue Exception => e ruby Cの拡張機能から(ちょうどの代わりに rescue => e)?

役に立ちましたか?

解決

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; }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top