Extensiones de Ruby C:¿Cómo puedo detectar todas las excepciones, incluidas las que no son errores estándar?

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

Pregunta

En rubí,

begin
  # ...
rescue
  # ...
end

no detectará excepciones que no sean subclases de StandardError.Cª,

rb_rescue(x, Qnil, y, Qnil);

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

hará lo mismo.Cómo puedo rescue Exception => e desde una extensión Ruby C (en lugar de solo rescue => e)?

¿Fue útil?

Solución

Ruby necesita más documentación.Tuve que acceder al código fuente de Ruby y esto es lo que encontré:

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);
}

Entonces, la respuesta a mi pregunta (supongo) sería:

rb_rescue2(x, Qnil, y, Qnil, rb_eException, (VALUE)0);

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top