[ruby-list:38417] Re: モジュール内で別のモジュールのオブジェクトを返すには?

From: Koji Arai <JCA02266@...>
Date: 2003-09-21 16:39:51 UTC
List: ruby-list #38417
新井です。

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)

In This Thread