Как передать блок, написанный на C, в Ruby в 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
,
Есть идеи? Спасибо!
1 ответ
Решение
В текущем использовании уточнения применяются к модулям. Это прямо в названии метода.
AFAIK, он не работает напрямую с блоками.
Единственный способ увидеть эту работу - создать метод "C" в модуле, а затем использовать код ruby, чтобы применить этот модуль в качестве уточнения традиционным способом.