要从我的库中初始化一个类,我正在这样做:
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和实习生?
答案 0 :(得分: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