2010-03-29 5 views
5

Si escribe un método Ruby como una función en C que usa rb_raise, la parte de la función después de la llamada no se ejecutará y el programa se detendrá y pensará que rb_raise usó exit(). Pero si usted rescata la excepción de rubí, como:¿Cómo funciona el rb_raise de ruby ​​para detener la ejecución de la función c llamándolo?

begin 
    method_that_raises_an_exception 
rescue 
end 
puts 'You wil still get here.' 

El código Ruby continuará, pero su función se detendrá excecuting. ¿Cómo lo hace posible rb_raise?

Respuesta

5

Es de suponer que utiliza setjmp (antes de llamar al método) y longjmp (en rb_raise).

Cuestiones relacionadas