您如何将用C语言编写的块传递给Ruby的rb_mod_refine?

时间:2019-04-05 15:49:21

标签: c ruby mri ruby-native-extensions

也许更一般而言,如何将用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的方法。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在当前用法中,优化应用于模块。就在方法名称中。

AFAIK,它不能直接与块一起使用。

我看到此工作的唯一方法是在模块中创建“ C”方法,然后使用ruby代码以常规方式将模块作为改进应用。