From: Shin'ya Adzumi Date: 2002-06-15T17:02:37+09:00 Subject: [ruby-dev:17448] Re: return value from methods of Array's subclass あづみです。 Minero Aoki wrote: > > なので、返ってくるオブジェクトのクラスが違う場合があります。 > > これがどうにも気持ち悪く感じたからです。あと、元のオブジェクト > > と同じクラスのインスタンスを返すメソッドができたなら、 > > Array#collect! の存在意義はないと思ったからです。 > > 存在意義がないことはないでしょう。一つの配列がたくさんのオブ > ジェクトから参照されている場合、その配列を別のオブジェクトに > すりかえるのは大変です。 存在意義がなくなるのは、「元のオブジェクトと同じクラスのインス タンスを返すメソッドができたなら」の場合です。最初の提案でいう と map! を使えばいいわけで、collect! がある必要がない、という 事です。 > また互換性の点から言うと、collect! は filter の移行用として > 使われているのでなくなるのはまずいっす。 これは知りませんでした。 rb_warn("Array#filter is deprecated; use Array#collect!"); ですね。 さすがにこれだと collect! がなくなるのはまずいですね。 あと、Array#filter という名前も使えないのも。 # こういうのがあるという事は collect! って結構新しいメソッド # なんだなと思って調べたら、ruby-1.4.5 から増えてますね。 # …って更に調べてたら collect! に違和感がという話を発見。 # この辺の話が詳しく知りたいけどどこにあるのかが分からない… 安積伸弥 adzumi@denpa.org