まつもと ゆきひろです

民斗さんのメールがはねられてました.

------- Start of forwarded message -------
From: =?ISO-2022-JP?B?GyRCTDFFTRsoQg==?= <tommy / valley.nejp>
To: ruby-ext / netlab.co.jp
Subject: Re: [ruby-ext:00066] Re: Object =?ISO-2022-JP?B?GyRCJE4bKEI=?=
     =?ISO-2022-JP?B?GyRCQDhALhsoQg==?=

民斗です。

[Subject: [ruby-ext:00066] Re: Object の生成]
[Date: Thu, 14 Jan 1999 17:14:22 +0900  From:Yukihiro Matsumoto]

> |なんか、かなり初歩的な質問かもしれないんですが、とあるクラスの
> |オブジェクトを new() 以外で生成したいのです。
> 
> |obj_alloc() というそれっぽい関数を Data_Wrap_Object() の代わりに
> |使うとうまく動くようですが、obj_alloc() は README.EXT.jp に記述が
> |なくて、本当にこれでいいのかわかりませんでした。

> そのクラスの「タイプ」はT_OBJECTを望んでいるんですね.その場
> 合にはご推察の通り,obj_alloc(1.3ではrb_obj_alloc)で正解です.

T_OBJECT というより、インスタンス変数が使えるのが望みなんです。
結果的に選択肢は T_OBJECT しかないようですが。

Data_Wrap_Object() では、そのオブジェクトに第四引数でデータを保持
できるようですが、同じことが obj_alloc() でも可能でしょうか?

# "obj = obj_alloc(cTest); DATA_PTR(obj) = fuga;" でいいのかな…?


さらにお聞きしたいんですが、T_DATA と T_OBJECT の違いというのは
インスタンス変数を持てるかどうか以外にも何かあるんでしょうか?

使い分けが良くわからなくて…。


> |あと、ruby のソースを見てみると obj_alloc() の後に obj_call_init() 
> |というのを呼んでたりするんですが、これも何をやっているか良くわかり
> |ませんでした。
> 
> obj_call_initはinitializeを呼ぶための関数です.newの実装の中
> で,これを呼んどくとそのオブジェクトに対するinitializeが呼ば
> れます.

あ、なるほど。了解しました。

--
民斗 <tommy / valley.ne.jp>
------- End of forwarded message -------