Возможно, в более общем смысле, как передать блок, написанный на 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
.
Есть идеи? Спасибо!