Tôi đang cố gắng viết phần mở rộng C thành ruby để tạo một lớp. Tôi đang tìm cách xác định một số đối số mặc định cho một lớp. Ví dụ, nếu tôi có decleration lớp này trong ruby:Mở rộng ruby trong C - cách xác định giá trị đối số mặc định để hoạt động?
class MyClass
def initialize(name, age=10)
@name = name
@age = age
end
end
Bạn có thể khởi tạo nó với mc = MyClass.new("blah")
, và tham số tuổi sẽ được thiết lập trong nội bộ. Làm thế nào để làm điều này trong C? Cho đến nay tôi nhận được điều này, nhưng lực lượng này vào lập luận khá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);
}
Tôi nghĩ về việc kiểm tra giá trị của age
chống Qnil
hoặc sử dụng if (TYPE(age) == T_UNDEF)
, nhưng tôi chỉ nhận được segfaults từ đó. Đọc qua số README.EXT
dẫn tôi tin rằng tôi có thể thực hiện điều này thông qua rb_define_method
bằng cách sử dụng giá trị argc
, nhưng điều này không quá rõ ràng. Bất kỳ ý tưởng? Cảm ơn.
lớn ghi lên, tôi muốn upvote nó hai lần nếu tôi có thể - cảm ơn! – sa125