나는 클래스를 생성하는 루비에 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)
사용에 대한 생각을하지만 난 그냥 거기에서 세그먼테이션 폴트 (segfault)를 얻는다. README.EXT
을 통해 읽는 것은 argc
의 값을 사용하여 rb_define_method
을 통해이를 수행 할 수 있다고 믿습니다. 그러나 이것은 너무 명확하지 않습니다. 어떤 아이디어? 감사.
좋은 쓰기까지, 나는 두 번 upvote에 줄 - 감사합니다! – sa125