[#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:8090] Re: [ruby-list:17940] Enumerable#collect

From: Takashi Ikeda <cercine@...>
Date: 1999-10-22 18:48:37 UTC
List: ruby-dev #8090
池田孝志です。

レシーバのeachで得た要素の配列を返すだけのcollectなのですが、

module Enumerable
  def collect
    ary = []
    if iterator?
      each {|elt| ary << yield(elt) }
    else
      each {|elt| ary << elt }
    end
    ary
  end
end

互換性はあります。あとはコストを認めるかどうかなのでしょうか。

全然ソースを見ずにものを言ってるのですが、iterator? などはど
れくらいのコストがあるものでしょうか?既存のスクリプトのこと
を考えると(まあ、そんな大したことないと思うけど)気になりま
す。

また、やはり何がやってくるか分からないと言うことで配列のため
の最適化も出来そうですが、

module Enumerable
  def collect
    return self.dup if self.is_a? Array
    ary = []
    if iterator?
      each {|elt| ary << yield(elt) }
    else
      each {|elt| ary << elt }
    end
    ary
  end
end

そこまでする必要もないですよね。以前のcollectに対しておこが
ましいような。
ていうか、こんなことを言ってたら、collect!ってのが要るのかな…
要らない…

ソースに落せと言われても分かりません。フォローお願いしますm(__)m

やはり、動的にオブジェクトの持っている集合の内容が変わってく
るような時は、これは役に立つのではと思ってます。
[ruby-list:17940]の例でも、srandしなければ、一応は乱数表にな
りそうですし。あそこではレシーバが配列でないことを強調したかっ
ただけなのであえていつも同じものを返すクラスを作ってみました
が。

今考えている使い方としては、記事の集合があって、こいつが実際
には順序づけられていて、すべてを取り出したい時に、Enumerable
のやり方で取り出せたらいいな、ということでした。
最初に必要を感じたのはDirでしたが、親/自分のディレクトリを取
り去りたかったせいでお流れになってました(^^; 
なにか、他に使えるクラスや事例があると面白そうです。

-- 
池田 孝志  cercine@kcn.ne.jp

In This Thread

Prev Next