白川です。

詳細なリプライありがとございます。

On Tue, 16 Oct 2001 12:26:09 +0900
Minero Aoki <aamine / mx.edit.ne.jp> wrote:

> あおきです。
> 
> > > ただ、そもそも組み込みクラス (特に String と Array) は可能な限り
> > > 継承しないほうがいいでしょう。
> > 
> > このあたりの感覚がまだ全然分かんないんですよね。
> > なぜなのでしょう? 教えていただけますか?
> 
> うーん、そうですねえ……
> 今回の、継承してもメソッドを呼ぶと結局 String が返ってくるという
> のがまずひとつの理由です。それから、file.gets とか Array.join など
> でもやはり String が返ってきます。そういうのは返り値をもらってから
> こちらで変換するなりラップするなりしないといけないわけで、それが
> 許されるならその場で process(string) みたいにすることも問題ない
> ように思います。

下記の説明もあわせて読んで、クライアント側で処理できる場合とか、
よく分かりました。
逆に自分で親クラスを作っている場合で、積極的に継承してもらって
その子クラスを返したい場合は、 self.class.new()とか やって
おけば良いと。 なるほど。

・・大胆に、中略・・

> またラップする場合にはメソッドが減ることが多いようです。

ですよね。 いっぱいメソッドあるとラッパークラス作るのが
楽しくないです。
例えば、
  class MyArray < Array
    wrapper_def:&, |, *, +, -, <<, [], assoc, at, clear, などなど
    def toCSV()
    end
  end
とかできると楽しいかな...

ついでに、
  class MyArray < Array
    self_class_new: &, |, *, +, -, <<, [],  などなど
  end
とかして、親クラス側じゃなくて、子クラスを返すようになっても
いいかも :-)

----------------------
白川貴久