現在、C 拡張機能を使用して作成された一連のオブジェクトがあるので、それらは
- フー
- バー
- バズ。
それらの 3 つをインスタンス化し、それらの関数を呼び出し、結果を処理する 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);
または、よりクリーンな方法はありますか?