4

我想知道如何将用 C 扩展编写的本机方法添加到预先存在的 Ruby 类中?我只找到了允许您创建新的 Ruby 类的函数,但没有找到返回预先存在的类的函数。

4

1 回答 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_underor创建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 回答