まつもと ゆきひろです

In message "[ruby-list:31873] Re: 先祖がえり"
    on 01/10/15, Minero Aoki <aamine / mx.edit.ne.jp> writes:

|> class Bar < Array
|> end
|> p Bar.new.push(1,2,3)[0,0].type   # => Array
|>
|> となるのは、まだバグなんじゃないかなっと思うのですが。。。
|
|このへんは RubyGarden にいくつか報告が出ていて、まつもとさんの
|コメントも既に付いてるので見てみてください。たとえば RCR38 とか。
|そのコメントを簡単にまとめると
|「レシーバのクラスを返すべきものも確かにあるが、そうでないものも
|  ある。たとえば binary method (+ - * など?)は常に String を返すべき」
|だそうです。

上記の空文字列または空配列が元のクラスでないというのはバグと
言っても良いと思いますが、その他の点についてはその通りです。

今、悩んでいるのはRCR44(だったかな)にあったように、collectは
どちらを返すべきかという点です。文句はつけられているものの、
元の配列の要素を加工した値を集めているという観点からは、元の
クラスを保存するのはなにか違うようにも感じます。

|というか もしかして話は逆で、String を継承すると妙な振舞いに
|なるようにすることで「String は継承するべきでないのだ」という
|思想を植え付けようとしているのかも……

そこまでは考えてませんでした。

                                まつもと ゆきひろ /:|)