From: Tanaka Akira Date: 2009-05-21T16:28:17+09:00 Subject: [ruby-dev:38512] Re: Enumerable#gather_each In article , Yukihiro Matsumoto 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]