也许更一般地说,你如何将一个用 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
.
有任何想法吗?谢谢!