使用c扩展创建的对象是否可以实例化并相互管理?

使用c扩展创建的对象是否可以实例化并相互管理?,c,ruby,ruby-c-extension,C,Ruby,Ruby C Extension,现在我有一系列使用C扩展创建的对象,所以说它们是 福 酒吧 巴兹 我有ruby代码来实例化这三个函数,调用它们的函数并处理结果。我们称之为: 经理 嗯,现在Manager是我的瓶颈,所以我想把它转换成C扩展。但我不知道如何从Manager中实例化Foo、Bar和Baz。我是否必须使用以下代码: VALUE module_klass = rb_const_get(rb_cObject, rb_intern("Module")); VALUE object_klass = rb_const_

现在我有一系列使用C扩展创建的对象,所以说它们是

  • 酒吧
  • 巴兹
我有ruby代码来实例化这三个函数,调用它们的函数并处理结果。我们称之为:

  • 经理
嗯,现在Manager是我的瓶颈,所以我想把它转换成C扩展。但我不知道如何从Manager中实例化Foo、Bar和Baz。我是否必须使用以下代码:

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);     

还是有更干净的方法?

查看
rb\u class\u new\u 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"), ...);

签出
rb\u class\u new\u 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"), ...);

啊,这就是我需要的。谢谢啊,这就是我需要的。谢谢