From: Shin-ichiro HARA Date: 2005-11-12T16:30:59+09:00 Subject: [ruby-list:41529] Re: Matrix の継承について 原です。 >けいじゅ@いしつかです. >>エルミート行列で表現される演算子のクラスを作ろうとしていて、 >>メソッドと定数をMatrixに追加したかったのが主な目的です。 >>is_a Matrix として継承が自然かなと思ったのですが、まつもとさんが >>書かれたように、サブクラスを作ることが想定されていないクラスも >>あるので、継承は慎重に使わないといけないのですね。 > >たしかに, is_a 関係は成り立つかもしれません. >ただ, rubyは単純継承しか許していないので, エルミート行列などのようなも >のをすべてサブクラスと考えるようになると, 何でもかんでもサブクラスにす >るということになって, すぐに破錠しちゃいそうです. 確かに複数の行列クラスを体系的に継承関係で構築すると破綻すると思う のですが、ちょっとMatrixのメソッドをパクって、、という需要もあるわ けで、実際Arrayなどでは、 class YaArray < Array end a = YaArray[0, 1, 2] p a.class #=> YaArray となっています。 いっそ、吉田さんの提案のように、コンストラクタなどのクラスメソッド は特別な理由がない限り、 def Matrix.identity(n) Matrix.scalar(n, 1) end ではなくて、 def Matrix.identity(n) self.scalar(n, 1) end のように定義するのをRubyのポリシーとしてしまってもいいのでは?