白川です。 詳細なリプライありがとございます。 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 とかして、親クラス側じゃなくて、子クラスを返すようになっても いいかも :-) ---------------------- 白川貴久