rb_funcall の引数指定

Segmentation fault 出ると思ったらまた rb_funcall の引数が間違ってた。

  VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
  • recv: メソッドを呼び出す対象。
  • mid: メソッドを ID で指定。rb_intern("new") とか
  • argc: メソッドに与えたい引数の数
  • ...: 与える引数を順に指定

Runo::Enum の initialize メソッドはこうだから、

static VALUE
runo_enum_initialize(VALUE self, VALUE type_name, VALUE value)

new を呼ぶには

ID id = rb_intern("new");

rb_funcall(klass, id, 2, type_name, value);

昨日もこれで悩んだのに・・・。