Extensões Ruby c:Como posso capturar todas as exceções, incluindo coisas que não são StandardErrors?

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

Pergunta

Em rubi,

begin
  # ...
rescue
  # ...
end

não capturará exceções que não sejam subclasses de StandardError.Em C,

rb_rescue(x, Qnil, y, Qnil);

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

fará a mesma coisa.Como posso rescue Exception => e de uma extensão Ruby C (em vez de apenas rescue => e)?

Foi útil?

Solução

Ruby precisa de mais documentação.Tive que acessar o código-fonte do Ruby e foi isso que encontrei:

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

Então, a resposta à minha pergunta (eu acho) seria:

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

VALUE x(void) { /* ... */ return Qnil; }
VALUE y(void) { /* ... */ return Qnil; }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top