如何将用 C 编写的块传递给 Ruby 的 rb_mod_refine?
How do you pass a block, written in C, to Ruby's rb_mod_refine?
也许更一般地说,如何将用 C 编写的块传递给另一个接受块的 C 函数?我知道我可以做这样的事情:
VALUE refine_foobar(VALUE block_arg, VALUE data, int argc, VALUE* argv) {
// block code here
return Qnil;
}
void Init_mything() {
VALUE mod = rb_define_module("Foobar");
rb_block_call(mod, rb_intern("refine"), 0, NULL, refine_foobar, Qnil);
}
但我觉得必须有一种方法可以直接调用 rb_mod_refine
而不是通过 rb_block_call
.
有什么想法吗?谢谢!
在当前的使用中,优化应用于模块。它就在方法的名称中。
据我所知,它不能直接与块一起使用。
我能看到这个工作的唯一方法是在模块中创建一个 "C" 方法,然后使用 ruby 代码以常规方式应用该模块作为改进。
也许更一般地说,如何将用 C 编写的块传递给另一个接受块的 C 函数?我知道我可以做这样的事情:
VALUE refine_foobar(VALUE block_arg, VALUE data, int argc, VALUE* argv) {
// block code here
return Qnil;
}
void Init_mything() {
VALUE mod = rb_define_module("Foobar");
rb_block_call(mod, rb_intern("refine"), 0, NULL, refine_foobar, Qnil);
}
但我觉得必须有一种方法可以直接调用 rb_mod_refine
而不是通过 rb_block_call
.
有什么想法吗?谢谢!
在当前的使用中,优化应用于模块。它就在方法的名称中。
据我所知,它不能直接与块一起使用。
我能看到这个工作的唯一方法是在模块中创建一个 "C" 方法,然后使用 ruby 代码以常规方式应用该模块作为改进。