Ruby拡張ライブラリーで例外後のコードは動かない
Rubyの拡張ライブラリーを書く時に、Rubyの例外を起こした後のコードは動くのだろうか、というのが分からなかったので試した。 code:ext/learning-ruby-extension/learning-ruby-extension.c
static VALUE lre_print_after_raise(VALUE self) {
rb_raise(rb_eRuntimeError, "This is a runtime error");
printf("This is after the runtime error\n"); // This line will not be executed
return Qnil;
}
void
Init_learning_ruby_extension() {
VALUE cLearningRubyExtension = rb_define_class("LearningRubyExtension", rb_cObject);
rb_define_method(cLearningRubyExtension, "print_after_raise", lre_print_after_raise, 0);
}
コメントの通り、printf("This is after the runtime error\n");の行は実行されなかった。rb_raiseの中でexitか何かが呼ばれているのだろう。