为了从我的库中初始化一个类,我这样做:
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和intern?
发布于 2012-09-19 23:27:45
在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
https://stackoverflow.com/questions/12497669
复制相似问题