2010-03-29 8 views
5

Se si scrive un metodo ruby ​​come una funzione in C che utilizza rb_raise, la parte della funzione dopo la chiamata non verrà eseguita e il programma si interromperà e si penserà che rb_raise utilizzato exit(). Ma se si salvataggio l'eccezione in Ruby, come:In che modo rb_raise di ruby ​​blocca l'esecuzione della funzione c chiamandola?

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

Il codice ruby ​​andrà avanti, ma la funzione si fermerà excecuting. Come fa questo rb_raise a succedere?

risposta

5

Presumibilmente utilizza setjmp (prima che venga chiamato il metodo) e longjmp (in rb_raise).