ملحقات روبي سي:كيف يمكنني التقاط جميع الاستثناءات, بما في ذلك الأشياء التي ليست أخطاء قياسية?

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

سؤال

في روبي,

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; }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top