Ruby C Расширений: Как я могу поймать все исключения, включая вещи, которые не являются стандартными зернами?

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

Вопрос

в Ruby,

begin
  # ...
rescue
  # ...
end
.

не будет ловить исключения, которые не подклассы генеракодицетагкода.В C,

rb_rescue(x, Qnil, y, Qnil);

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

сделает то же самое.Как я могу генеракодицетагCode из расширения RUBY C (вместо просто StandardError)?

Это было полезно?

Решение

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