In che modo rb_raise di Ruby interrompe l'esecuzione della funzione c che lo chiama?
Domanda
Se scrivi un metodo ruby come funzione in C che utilizza rb_raise
, la parte della funzione successiva alla chiamata non verrà eseguita e il programma si fermerà e tu penserai che rb_raise
usato exit()
.Ma se salvi l'eccezione in Ruby, come:
begin
method_that_raises_an_exception
rescue
end
puts 'You wil still get here.'
Il codice Ruby continuerà, ma la tua funzione smetterà di essere eseguita.Come fa rb_raise
farlo accadere?
Soluzione
Presumibilmente usa setjmp
(prima che il metodo venga chiamato) e longjmp
(In rb_raise
).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow