Bir sınıf oluşturacak ruby'e bir C uzantısı yazmaya çalışıyorum. Bazı varsayılan argümanları bir sınıfa nasıl tanımlayacağım. Örneğin, ben Yakut bu sınıf beyanınıgeçersiz varsa:C içinde rubyeni genişletme - varsayılan argüman değerleri işlevinin nasıl belirtileceği?
class MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
Sen mc = MyClass.new("blah")
ile başlatabilir ve yaş parametresi dahili olarak ayarlanacak. Bunu C'de nasıl yapabilirim? Şimdiye kadar bu var, ama bu güçler diğer argüman girme:
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);
}
Ben Qnil
karşı age
değerini kontrol eden veya if (TYPE(age) == T_UNDEF)
kullanmayı düşündünüz, ama sadece oradan çalışma sırasında parçalama arızası olsun. README.EXT
aracılığıyla okuma, rb_define_method
aracılığıyla argc
değerini kullanarak bunu başarabileceğime inanmamı sağlıyor, ancak bu çok açık değildi. Herhangi bir fikir? Teşekkürler.
büyük yazma yukarı, ben iki kez upvote ediyorum - teşekkürler! – sa125