有没有更惯用的方法来初始化Ruby对象而不是在C中使用rb_funcall()?

时间:2012-09-19 15:15:48

标签: c ruby

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

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和实习生?

1 个答案:

答案 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