Как ruby_raise останавливает выполнение вызывающей его функции c? - PullRequest
6 голосов
/ 29 марта 2010

Если вы пишете метод ruby ​​как функцию в C, которая использует rb_raise, часть функции после вызова не будет освобождена, и программа остановится, и вы будете думать, что rb_raise использовал exit(). Но если вы спасете исключение в ruby, например:

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

Рубиновый код будет продолжаться, но ваша функция перестанет работать. Как rb_raise делает это возможным?

1 Ответ

6 голосов
/ 29 марта 2010

Предположительно он использует setjmp (до вызова метода) и longjmprb_raise).

...