我想知道如何将用 C 扩展编写的 native 方法添加到预先存在的 Ruby 类中?我只找到了允许您创建新的 Ruby 类的函数,但没有一个返回预先存在的类。
最佳答案
是的,你可以。在任何一种情况下,您都使用 rb_define_method
(或 rb_define_singleton_method
用于单例方法)。假设您有一个名为 rb_some_function
的 c 函数,它需要 1 个参数(除了 self 参数之外)
rb_define_method(someClass,
"some_function",
RUBY_METHOD_FUNC(rb_some_function),
1);
someClass 是新创建的类(使用 rb_define_class_under
或 rb_define_class
创建)还是现有类取决于您。您可以使用 rb_const_get
(与 Object 的 const_get
相同)方法来获取现有类。
someClass = rb_const_get(rb_cObject, rb_intern("SomeClass"));
rb_define_class
还将为您获取现有类(类似于在 ruby 中重新打开一个类)。如果您尝试定义一个具有父类(super class)的类,而该类已经存在另一个不同的类,它会以类似的方式爆炸。
关于ruby - 将 C native 方法添加到预先存在的 Ruby 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17833236/