新井です。

In message "[ruby-list:31873] Re: 先祖がえり"
  on 15 Oct 2001 19:29:06 +0900,
  Minero Aoki <aamine / mx.edit.ne.jp> wrote:
> あおきです。

> > 新井です。

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

見てみました。文字列を生成するメソッドと、self を加工するメ
ソッドがあるというわけですね。それはいいのですが、同じメソッ
ドが引数によって違う挙動を示すのは混乱を招くだけだと思うので
す。

    class Foo < String
    end
    p Foo.new("foo")[0,0].type   # => String
    p Foo.new("foo")[0,1].type   # => Foo

    class Bar < Array
    end
    p Bar.new.push(1,2,3)[0,0].type   # => Array
    p Bar.new.push(1,2,3)[0,1].type   # => Bar

--
新井康司 (Koji Arai)