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

有没有比在C中使用rb_funcall()更惯用的方法来初始化Ruby对象?,c,ruby,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、path2cla

要从我的库中初始化类,我将执行以下操作:

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?

它似乎没有在Ruby的
README.ext
中记录,但我在Ruby扩展中使用了一个名为
rb\u class\u new\u instance
的函数。原型基本上是:

rb_class_new_instance(argc, argv, klass);
它用于
StringIO.open

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


Ruby的
README.ext中似乎没有记录它,但我在Ruby扩展中使用了一个名为
rb\u class\u new\u instance的函数。原型基本上是:

rb_class_new_instance(argc, argv, klass);
它用于
StringIO.open

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