Как передать блок, написанный на C, в Ruby в rb_mod_refine? - PullRequest
1 голос
/ 05 апреля 2019

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

1 голос
/ 05 апреля 2019

В текущем использовании уточнения применяются к модулям.Это прямо в названии метода.

AFAIK, он не работает напрямую с блоками.

Единственный способ увидеть эту работу - создать метод "C" в модуле, а затем использовать код ruby, чтобы применить этот модуль в качестве уточнения традиционным способом.

...