2010-03-29 59 views
5

如果在C中使用rb_raise作爲函數編寫ruby方法,調用後的函數部分將不會被執行,程序將停止,您會認爲rb_raise使用了exit()。但是,如果你在搶救紅寶石的異常,如:ruby​​的rb_raise如何停止調用它的c函數的執行?

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

Ruby代碼會繼續下去,但你的函數將停止excecuting。 rb_raise如何做到這一點?

回答

5

推測它使用setjmp(在調用方法之前)和longjmp(在rb_raise)。