From: matz@... (Yukihiro Matsumoto) Date: 1997-08-29T13:45:10+09:00 Subject: [ruby-dev:325] Re: virtual class [Re: [Q] [Re: [BUG] method index] ] まつもと ゆきひろです In message "[ruby-dev:324] virtual class [Re: [Q] [Re: [BUG] method index] ]" on 97/08/29, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |仮想クラスのクラス定数やインスタンス変数はどうします? 仮想的なクラスに |状態があるというのも変ですよね? クラス定数は特異クラス定数みたいな概念 |を出せば済むと思いますが... どう考えてもインスタンス変数は無理がありま |すよね? 状態を持つことそのものは別に変じゃないと思いますけど.仮想ク ラスを含めた挙動に関してはちゃんと定義した方が良いのは確かで すね. どう思います? * 仮想クラスの定数はどこからアクセスできるべきか * 仮想クラスのインスタンス変数はどこからアクセスできるべき か 今のrubyの話をすれば,同じオブジェクトに対して仮想クラスを得 ると同じ状態の仮想クラス(定数やインスタンス変数を共有する)が 得られるということで問題ないと思うんですけど,それを仕様にし ちゃうと,もしrubyの別の実装を作る人がいて,毎回別の仮想クラ スを作ることにした時に大変なことになるなあ,なんて,そんな心 配すること無いか. |3. ついでにリクエスト |インスタンスとクラスの関係を調べるメソッドはありますが, クラスとクラス |の関係を調べるメソッドがないことに気づきました. | |* ancestor_of? せんぞか(module含む)? |* superclass_of? 直接のスーパクラスか? |* subclass_of? 直後のサブクラスか? |* descendant_of? 子孫か(module含む)? そうですね.でもancestorsがあれば調べられますよね. Moduleに追加するなら module Module def ancestor_of?(mod) self.ancestors.include?(mod) end def superclass_of?(klass) self.ancestors[0] == klass end def subclass_of?(klass) klass.ancestors[0] == self end def descendant_of?(mod) mod.ancestors.include?(self) end end で,どうでしょう? まつもと ゆきひろ /:|)