2010-03-29 5 views
5

Wenn Sie eine Ruby-Methode als eine Funktion in C schreiben, die rb_raise verwendet, wird der Teil der Funktion nach dem Aufruf nicht ausgeführt und das Programm wird gestoppt und Sie werden denken, dass rb_raiseexit() verwendet wird. Aber wenn Sie die Ausnahme in Ruby retten, wie:Wie Rubys rb_raise die Ausführung der c-Funktion stoppen sie nennen?

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

Der Ruby-Code wird weitergehen, aber Ihre Funktion stoppt excecuting. Wie macht das rb_raise dies möglich?

Antwort

5

Vermutlich verwendet es setjmp (bevor die Methode aufgerufen wird) und longjmp (in rb_raise).

Verwandte Themen