私は、クラスを生成するルビのC拡張を記述しようとしています。私はクラスにいくつかのデフォルトの引数を定義する方法を探しています。例えば、私はルビーで、このクラスdeclerationを持っている場合:Cでルビを拡張する - 関数のデフォルト引数値を指定する方法は?
はclass MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
あなたはmc = MyClass.new("blah")
でそれを初期化することができ、年齢パラメータが内部的に設定されます。私は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);
}
は私がQnil
に対してage
の値をチェックするか、if (TYPE(age) == T_UNDEF)
を使用して考えたが、私はちょうどそこからセグメンテーションフォールトを取得します。 README.EXT
を読むとargc
の値を使ってrb_define_method
でこれを達成できると信じていますが、これはあまり明確ではありませんでした。何か案は?ありがとう。
偉大な書き込みまでは、私はそれを2回upvoteしたい - 感謝を! – sa125