Я пытаюсь написать расширение 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
против Qnil
или использования if (TYPE (age) == T_UNDEF)
, но я просто получаю оттуда ошибки. Чтение README.EXT
наводит меня на мысль, что я могу добиться этого с помощью rb_define_method
, используя значение argc
, но это было не слишком ясно. Любые идеи? Спасибо.