[#38392] Enumerable#gather_each — Tanaka Akira <akr@...>

ときに、複数行をまとめて扱いたいことがあります。

47 messages 2009/05/09
[#38394] Re: Enumerable#gather_each — ujihisa <ujihisa@...> 2009/05/09

ujihisaと申します。

[#38400] Re: Enumerable#gather_each — Yukihiro Matsumoto <matz@...> 2009/05/09

まつもと ゆきひろです

[#38399] Re: Enumerable#gather_each — "Akinori MUSHA" <knu@...> 2009/05/09

At Sat, 9 May 2009 15:30:20 +0900,

[#38405] Re: Enumerable#gather_each — Tanaka Akira <akr@...> 2009/05/10

In article <86r5yy2nrg.knu@iDaemons.org>,

[#38417] Re: Enumerable#gather_each — "Akinori MUSHA" <knu@...> 2009/05/10

At Sun, 10 May 2009 10:08:47 +0900,

[#38524] [Bug #1503] -Kuをつけた時、/[#{s}]/n と Regexp.new("[#{s}]",nil,"n") で実行結果が異なる — sinnichi eguchi <redmine@...>

Bug #1503: -Kuをつけた時、/[#{s}]/n と Regexp.new("[#{s}]",nil,"n") で実行結果が異なる

8 messages 2009/05/22

[ruby-dev:38512] Re: Enumerable#gather_each

From: Tanaka Akira <akr@...>
Date: 2009-05-21 07:28:17 UTC
List: ruby-dev #38512
In article <E1M6RQS-0004aW-9N@x61.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> slice_byというメソッド名に異論はありません。
> :_separatorとか:_aloneとかはちょっと違和感があります。
> ドキュメントに例が載っていないからかもしれません。

:_separator と nil は同じ機能で、nil を使う例は載っています。
:_separator に書き換えるとこうなります。

     sep = "-"*72 + "\n"
     IO.popen("svn log README") {|f|                 
       f.slice_by {|line|
         line != sep || :_separator
       }.each {|_, lines|
         pp lines
       }      
     }

なお、separator という語を選ぶにあたっては delete や reject
などいくつか考えましたが、入力を破壊的に書き換えるものではな
いという点と、入力の要素が単に消えるのではなく、その要素をは
さんだ要素をまとめることはないという点を考慮しています。

:_alone の例だと、たとえば、chkbuild のログを diff するの
に必要になったものを簡略化すれば、

  pat = /\A[A-Z][A-Za-z0-9_]+(::[A-Z][A-Za-z0-9_]+)*\#/
  open(filename) {|f|
    f.slice_by {|line| pat =~ line ? $& : :_alone }.each {|key, lines|
      if key != :_alone
        print lines.sort.join('')
      else
        print lines.join('')
      end
    }
  }

というところでしょうか。
これは、pat にマッチするものが等しい連続した行を sort するこ
とによって、 minitest がテストの順序をランダムに変えても
diff で変化を検出しなくするようにする、というものです。

例が載っていない他に違和感はありますか?

> slice_beforeにも違和感があります。
> ruby-coreで聞いてみるべきなのかしら。それともbikeshedで収拾
> がつかなくなっちゃうかしら。

どのような違和感ですか?

そこが不明だと、どういうものを狙って探せばいいのかわかりませ
ん。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread