我想知道如何将用 C 扩展编写的本机方法添加到预先存在的 Ruby 类中?我只找到了允许您创建新的 Ruby 类的函数,但没有找到返回预先存在的类的函数。
问问题
540 次
1 回答
8
是的你可以。无论哪种情况,您都可以使用rb_define_method
(或rb_define_singleton_method
用于单例方法)。rb_some_function
假设您调用了需要 1 个参数(除了 self 参数)的ac 函数,您会这样做
rb_define_method(someClass,
"some_function",
RUBY_METHOD_FUNC(rb_some_function),
1);
someClass 是新创建的类(使用rb_define_class_under
or创建rb_define_class
)还是现有类取决于您。您可以使用rb_const_get
(与 Object's 相同的const_get
)方法来获取现有类。
someClass = rb_const_get(rb_cObject, rb_intern("SomeClass"));
rb_define_class
还将为您获取现有课程(类似于在 ruby 中重新打开课程)。如果您尝试使用超类定义一个类并且该类已经存在另一个不同的类,它将以类似的方式爆炸。
于 2013-07-24T12:11:56.137 回答