我正在尝试为 ruby 编写一个 C 扩展来生成一个类。我正在研究如何为类定义一些默认参数。例如,如果我在 ruby 中有此类声明:
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);
}
我考虑过检查age
againstQnil
或 using的值if ( TYPE(age) == T_UNDEF )
,但我只是从那里得到段错误。通读README.EXT
让我相信我可以通过rb_define_method
使用 的值来实现这一点argc
,但这并不太清楚。有任何想法吗?谢谢。