From: starfish Date: 2003-10-28T00:47:00+09:00 Subject: [ruby-list:38685] String サブクラスのメソッドが返すクラスについて 藤田と申します。 % ruby -v ruby 1.6.7 (2002-03-19) [i386-linux] String のサブクラスとして、SubString を定義したとき、 メソッド [first...last], +, << のそれぞれが返すインスタンスのクラスが異なっています。 これは、意図したものなのでしょうか? 感覚的には、全て、SubString クラスを返すのかなと 思ったのですが。不思議。 一応、リファレンスマニュアル中の 'Ruby 変更履歴' などを読んでみたのですがそれらしい記述は無かったように思いますので、 1.8 でも同様なのだと、推測しています。 具体的には以下に述べる通りです。 リファレンスマニュアルでは、 [first...last] => '文字列を返す' + => '文字列を返す' << => self を返す となっています。それぞれ、返すクラスは [first...last] => SubString1 + => String << => SubString1 となっています。 % irb irb(main):001:0> class SubString < String irb(main):002:1> end nil irb(main):003:0> ss = SubString.new("str") "str" irb(main):004:0> ss.class SubString irb(main):005:0> ss[0...3].class SubString irb(main):006:0> (ss + ss).class String irb(main):007:0> ( ss << ss ).class SubString irb(main):008:0>