ملحقات روبي سي:كيف يمكنني التقاط جميع الاستثناءات, بما في ذلك الأشياء التي ليست أخطاء قياسية?
-
13-09-2020 - |
سؤال
في روبي,
begin
# ...
rescue
# ...
end
لن قبض الاستثناءات التي ليست فئات فرعية من StandardError
.في ج,
rb_rescue(x, Qnil, y, Qnil);
VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
سوف تفعل الشيء نفسه.كيف يمكنني rescue Exception => e
من امتداد روبي ج (بدلا من مجرد rescue => e
)?
المحلول
روبي يحتاج إلى مزيد من الوثائق.اضطررت للذهاب إلى شفرة المصدر روبي ، وهذا ما وجدته:
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