gpt4 book ai didi

c - 是否有比在 C 中使用 rb_funcall() 更惯用的方式来初始化 Ruby 对象?

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:41 25 4
gpt4 key购买 nike

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

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_class_new_instance 的函数。原型(prototype)基本上是:

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

关于c - 是否有比在 C 中使用 rb_funcall() 更惯用的方式来初始化 Ruby 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com