Расширение ruby ​​в C - как указать значения аргументов по умолчанию для работы?

Я пытаюсь написать расширение 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 , но это было не слишком ясно. Любые идеи? Спасибо.

16
задан Matheus Moreira 24 February 2012 в 17:09
поделиться