Ruby cの拡張機能:StandardErrorsではないものを含むすべての例外をキャッチするにはどうすればよいですか?
-
13-09-2020 - |
質問
ルビで,
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; }
所属していません StackOverflow