如何将用 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 代码以常规方式应用该模块作为改进。