Могут ли объекты, созданные с помощью расширений c, создавать и управлять друг другом? - PullRequest
1 голос
/ 01 июля 2011

Прямо сейчас у меня есть ряд объектов, которые создаются с использованием расширений C, так что они

  • Foo
  • Bar
  • Baz.

У меня есть код ruby, который создает три из них, вызывает их функции и обрабатывает результаты.Давайте назовем это так:

  • Менеджер

Что ж, теперь Менеджер - мое узкое место, поэтому я бы хотел превратить его в расширение Си.Но я не знаю, как создать экземпляр Foo, Bar и Baz из Manager.Должен ли я использовать код вроде:

VALUE module_klass = rb_const_get(rb_cObject, rb_intern("Module"));
VALUE object_klass = rb_const_get(module_klass, rb_intern("Foo"));

А затем вызывать методы вроде:

rb_funcall(object_klass, rb_intern("new"), 0);     

Или есть более чистый способ?

1 Ответ

4 голосов
/ 02 июля 2011

Выезд rb_class_new_instance(). Вы бы сделали что-то вроде:

VALUE module_klass = rb_const_get(rb_cObject, rb_intern("Module"));
VALUE foo_klass    = rb_const_get(module_klass, rb_intern("Foo"));
VALUE foo          = rb_class_new_instance(0, NULL, foo_klass);
VALUE data         = rb_funcall(foo, rb_intern("some_foo_method"), ...);
...