まつもと ゆきひろです

In message "[ruby-ext:00065] Object の生成"
    on 99/01/14, 民斗 <tommy / valley.ne.jp> writes:

|民斗です。
|
|なんか、かなり初歩的な質問かもしれないんですが、とあるクラスの
|オブジェクトを new() 以外で生成したいのです。

|obj_alloc() というそれっぽい関数を Data_Wrap_Object() の代わりに
|使うとうまく動くようですが、obj_alloc() は README.EXT.jp に記述が
|なくて、本当にこれでいいのかわかりませんでした。

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

|あと、ruby のソースを見てみると obj_alloc() の後に obj_call_init() 
|というのを呼んでたりするんですが、これも何をやっているか良くわかり
|ませんでした。

obj_call_initはinitializeを呼ぶための関数です.newの実装の中
で,これを呼んどくとそのオブジェクトに対するinitializeが呼ば
れます.

|調べてみると、Test が cObject のサブクラスにも関わらず、TYPE(obj) は 
|T_OBJECT ではなくて T_DATA になってしまっているためのようでした。
|
|# でも ruby レベルでは obj.kind_of?(Object) == true で
|# obj.kind_of?(Data) == false になる… (?_?)

「タイプ」はクラスとはある程度独立なのです.たとえば,文字列
はObjectのサブクラスですがタイプはT_STRINGです.

                                まつもと ゆきひろ /:|)