クラスを生成する C 拡張を ruby に書こうとしています。クラスにいくつかのデフォルト引数を定義する方法を探しています。たとえば、Ruby でこのクラス宣言があるとします。
class MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
で初期化できmc = MyClass.new("blah")
、 age パラメータが内部で設定されます。Cでこれを行うにはどうすればよいですか? これまでのところ、これを取得しましたが、これにより、他の引数が強制的に入力されます。
require "ruby.h"
static VALUE my_init(VALUE self, VALUE name, VALUE age)
{
rb_iv_set(self, "@name", name);
rb_iv_set(self, "@age", age);
return self;
}
VALUE cMyClass;
void Init_MyClass()
{
// create a ruby class instance
cMyClass = rb_define_class("MyClass", rb_cObject);
// connect the instance methods to the object
rb_define_method(cMyClass, "initialize", my_init, 2);
}
の値をチェックするか、を使用することを考えましたage
がQnil
、if ( TYPE(age) == T_UNDEF )
そこから segfault が発生します。読んでみると、 の値を使用してREADME.EXT
これを達成できると思いますが、これはあまり明確ではありませんでした。何か案は?ありがとう。rb_define_method
argc