From: EGUCHI Osamu Date: 1999-10-26T22:05:01+09:00 Subject: [ruby-dev:8121] Re: [ruby-list:17940] Enumerable#collect えぐち@エスアンドイー です。 >>> In message [ruby-dev:8110] Re: [ruby-list:17940] Enumerable#collect On Sun, 24 Oct 1999 07:12:34 +0900, nobu.nakada@nifty.ne.jp said: なかだ> なかだです。 なかだ> なかだ> At Sat, 23 Oct 1999 22:07:33 +0900, なかだ> EGUCHI Osamu wrote: なかだ> > return self.dup if self.is_a? Array なかだ> > なかだ> > に相当する部分が、がありませんが、 なかだ> > ここの dup の必要性は議論の余地がありますね。 なかだ> > ここに dup が要るのであれば、 Array#to_a にも なかだ> > dup が要る様な気がします。 なかだ> なかだ> to_a/collect は必ず新しい Array に push していきますから dup は なかだ> いらないと思います。 この、 『Array#to_a にもdup が要る様な気がします。』は、 % ruby -v ruby 1.4.2 (1999-09-18) [i386-freebsd3.3] % ruby -e 'a=[];b=a.to_a;p a.equal? b' →true % の様な状況の事を言っています。 あと、大概の to_a / collect は新しい Array に push しているので、 dup は不要と言うのは同感ですが、 return self.dup if self.is_a? Array では、「大概の」ではなく、Array#collect を特別扱いしています。 まぁ、効率にしか影響しないし、必ずしも速くなる場合だけでもなようです。 この行の必要性より、Array#to_a が Array#dup の振舞をするべきか の方に興味(というか私の意見の趣旨)があります。 なかだ> > 名前の問題でもあるのですが、 なかだ> > to_a に ブロックを渡すと言う発想は今までなかったわけで、 なかだ> > collect なのか to_a なのかとは別に、有用な機能だと思います。 なかだ> なかだ> つーか、ブロックを渡すときは collect で、って状態ですね。さらに なかだ> いえば、collect がブロックをとらなくても良くて、to_a がブロックを なかだ> とっても良いとなれば、これはもう単なる alias でしょう。 ちょうどそんな状況を考えていたのですが、 変換や無変換のコピーを統一すると言うのは、 考え方としては成立しても、スタイルとしてあまり必然性がないですね。 #というか読みにくい^^;; なかだ> > さらに to_a の議論を発展させると、全てのクラスの to_a にブロックを渡し、 なかだ> > (今まで暗黙だった)配列化の実装をユーザの裁量に任せると言う事も、 なかだ> > 状況によっては、有意義だと思います。 なかだ> > なかだ> > また、さらに拡大すると、to_i, to_f や to_s にブロックを渡すのも、、、 なかだ> > 、、ここまでイテレータにするとやりすぎ? なかだ> なかだ> to_* というのは、そのオブジェクトだけで処理できるはずという、もっ なかだ> と閉じたメソッドだと思います。再定義するとかならともかくイテレー なかだ> タはヘンじゃないでしょうか。 まつもと さんからも、同じ趣旨の指摘を頂きましたが、 これは、ちょっとやりすぎ、と言うかへんですね。。^^;; えぐち