新井です。 In message "[ruby-list:38416] モジュール内で別のモジュールのオブジェクトを返すには?" on 21 Sep 2003 23:59:40 +0900, EMOTO Masahiko <emo / nifs.ac.jp> wrote: > > 現在 C 言語でクラスを作成しています。 > > クラス Foo とクラス Bar があって、クラス > Bar 内のメソッド foobar() の戻り値として > Foo のオブジェクトを新たに作って返したい > のですがうまく動きません。 foo.c の get_Foo() を以下のようにすると直りませんか? # 結局 get_Foo() という関数自体がいらないわけですが VALUE get_Foo () { return rb_const_get(rb_cObject, rb_intern("Foo")); } 私もよくわからないのですが、元の VALUE get_Foo () { return cFoo; } だと、load 直後に cFoo の内容が書き変わってうまくいかないようです。 最初 rb_global_variable(&cFoo) してないからだと思ったのです がそうでもないようで、init_foo() と get_Foo() の二箇所で、 printf("&cFoo=%x\n",&cFoo); を実行すると結果が変わってました。 Init_bar Init_foo cFoo=1075595140 &cFoo=4001b298 <- init_foo() のとき new_Bar initialize_Bar createFoo &cFoo=40018298 <- get_foo() のとき new_Foo klass=0 ruby スクリプトで require 'foo' # <- これをいれる require 'bar' p Bar.new.createFoo としても問題は再現しないようです。シェアドライブラリからシェ アドライブラリをロードするときに何かあるのでした? 環境: ruby 1.6.8 (2003-08-03) [i586-linux] gcc version 3.3.2 20030908 (Debian prerelease) -- 新井康司 (Koji Arai)