Если Вы пишете рубиновый метод как функцию в C, который использует rb_raise
, часть функции после вызова не будет выполняться, и программа остановится, и Вы будете думать это rb_raise
б/У exit()
. Но если Вы спасаете исключение в рубине, как:
begin
method_that_raises_an_exception
rescue
end
puts 'You wil still get here.'
Код Ruby продолжится, но Ваша функция прекратит выполняться. Как делает rb_raise
заставить это произойти?
Предположительно он использует setjmp
(до вызова метода) и longjmp
(в rb_raise
).