こんにちは、おがたです。 みなさん、コメントありがとうございます。 内容がわかりづらくて申し訳ないです。 背景を説明しますと、もともとは、デザインパターン本の手習いと いうことで一番なじみやすかった Composite パターンを実装して みようと思ったのです。 当初は本に習ってクラス間の継承の形にしていたのですが実用段階 になって Component クラスから継承させて、新しい Composite の 親を作りたいと感じました。 どうせだから、動的に親を変えられる Composite を目指そうと Component を module にする案も考えてみたのですが、Component にインスタンス変数が必要なため、あまり適していないと思いまし た。(どこで初期化すべきか判断つかなかったから) そんなおり、23125 からのスレッドを見て、インスタンス変数に 封じ込める手があるんだなぁ、と。 Proxy パターンは、該当すると思ったのですが、ちょっと内容を 把握しきれなかったので、自分のわかる範囲でやってみようとして こうなってしまったわけです。 簡単にテストしてみたら ary = ExtArray.new p ary.type #-> ExtArray p (ary<<25).type #-> Array となったので今回は見送りかなぁと。 # method_missing(meg_id,*arg)で渡すのと違いが良くわかっていない # というのが...精進が足りてませんね return self にこだわりたいというのは、雛型の Component クラス から継承させて、Composite の親となる Component クラスを作る時に return @self を強要するのはバグの元かなという発想でした。 (もともと、Component クラスとしては return self で問題ないので) def self=(_self) は SyntacsError なので無理かな?と思ったのですが attr_accessor:self が通ったので、工夫すればできるのかな?とおもったりして。 すっぱり、あきらめるべきですね。 --------------------------------------------------- Kenya Ogata E-mail k_ogata / mbd.nifty.com HomePage http://homepage1.nifty.com/~k_ogata/ruby/diary.html