ごとけんです

In message "[ruby-dev:8428] Re: 1.4.3 (Re:  Re: [REQ] [].grep(pat){} ==> [].grep(pat).collect{})"
    on 99/11/25, Shin-ichiro Hara <sinara / blade.nagaokaut.ac.jp> writes:
>原です。

>|> >  * grepで真偽値を欲しがる場合は無いのか
>|
>|  grep が常に Array を返すと決まっていれば、empty? で済むのでいい
>|のでは。
>
>前にも提案したんですが、マッチが見つかったらその時点でループを
>抜けるバージョン(真偽値を返す)は必要ないですかね。

find で書けるじゃんというのはともかく、たとえば第二引数で制
御するというのはありかも知れませんね。ためしに書いてみよう…

  def grep(obj, more = true, &blk)
    if more
      res = find_all{|i| obj === i}
      res.filter(&blk) if iterator?
    else
      res = find{|i| obj === i}
      res = yield(res) if res && iterator?
    end
    return res
  end

あう、複雑な仕様だ… どうせやるなら include? かな…

  def include?(obj, cmp = :==)
    catch(:found) do
      each{|i| throw(:found, true) if obj.__send__(cmp, i)}
      false
    end
  end

お、これはいいかも。

-- gotoken