2

要从我的库中初始化一个类,我正在这样做:

VALUE obj = rb_funcall(rb_path2class("MyGem::ClassName"),
                rb_intern("new"), 2, arg1, arg2);

感觉很多样板代码都可以压缩成一个宏,比如:

VALUE obj = CLASS_INIT("MyGem::ClassName", 2, arg1, arg2)

或者这只是我必须自己写的东西,如果它让我如此困扰,重复 funcall、path2class 和实习生?

4

1 回答 1

4

它似乎没有记录在 Ruby 中,README.ext但是我在我的 Ruby 扩展中使用了一个名为rb_class_new_instance. 原型基本上是:

rb_class_new_instance(argc, argv, klass);

它用于StringIO.open

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/stringio/rdoc/StringIO.html

你可以在这里看到我是如何使用它的:

https://github.com/DavidEGrayson/ruby-usb-pro/blob/master/ext/device_handle.c

于 2012-09-19T15:27:45.417 回答