Estoy tratando de escribir una extensión C para ruby que generará una clase. Estoy buscando cómo definir algunos argumentos predeterminados para una clase. Por ejemplo, si tengo esta clase decleration en rubí:Ruby de extensión en C: cómo especificar valores de argumento predeterminados para que funcionen?
class MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
puede inicializar con mc = MyClass.new("blah")
, y el parámetro de edad se establecerá internamente. ¿Cómo hago esto en C? Hasta ahora Tengo esto, pero esto obliga a entrar en el otro argumento:
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);
}
pensé acerca de la comprobación del valor de age
contra Qnil
o el uso de if (TYPE(age) == T_UNDEF)
, pero apenas consigo segfaults desde allí. Leyendo a través de README.EXT
me lleva a creer que puedo lograr esto a través de rb_define_method
usando el valor de argc
, pero esto no estaba muy claro. ¿Algunas ideas? Gracias.
gran escritura, me había Upvote dos veces si pudiera - gracias! – sa125