我想写一个C扩展到Ruby将会生成一个类。我正在研究如何为某个类定义一些默认参数。举例来说,如果我有红宝石该类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
的阅读导致我相信我可以通过rb_define_method
使用argc
的值完成此操作,但这并不太清楚。有任何想法吗?谢谢。
伟大的写了起来,我想如果我能给予好评两次 - 谢谢! – sa125