[#7968] array .{first, last, at} — Kazunori NISHI <kazunori@...>

西@九大です。

25 messages 1999/10/07
[#7969] Re: array .{first, last, at} — nobu.nakada@... 1999/10/07

なかだです。

[#7983] Re: array .{first, last, at} — Kazunori NISHI <kazunori@...> 1999/10/12

西@九大です。

[#7984] Re: array .{first, last, at} — matz@... (Yukihiro Matsumoto) 1999/10/12

まつもと ゆきひろです

[#7985] [patch] Array#delete_at w/ minus value — EGUCHI Osamu <eguchi@...> 1999/10/12

えぐち@エスアンドイーです。

[ruby-dev:8121] Re: [ruby-list:17940] Enumerable#collect

From: EGUCHI Osamu <eguchi@...>
Date: 1999-10-26 13:05:01 UTC
List: ruby-dev #8121
えぐち@エスアンドイー です。

>>> 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 <eguchi@shizuokanet.ne.jp> 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_* というのは、そのオブジェクトだけで処理できるはずという、もっ
なかだ> と閉じたメソッドだと思います。再定義するとかならともかくイテレー
なかだ> タはヘンじゃないでしょうか。

まつもと さんからも、同じ趣旨の指摘を頂きましたが、
これは、ちょっとやりすぎ、と言うかへんですね。。^^;;

	えぐち

In This Thread