From: Tanaka Akira Date: 2009-05-09T17:18:21+09:00 Subject: [ruby-dev:38395] Re: Enumerable#gather_each In article <4d8a2fb40905082353l6be190cdx61201d083bebfeb4@mail.gmail.com>, ujihisa writes: > 一度に二つの手続きを渡すのではなく、一つのブロックを受け取りEnumeratorを返すgatherと、従来のeachに分けた方が自然になるのではないでしょうか。 > > 元々の例: > f.gather_each(lambda {|l| l == "\n" }) {|lines| pp lines } > f.gather_each(->(l){ l == "\n" }) {|lines| pp lines } > > 提案例: > f.gather {|i| i == "\n" }.each {|lines| pp lines } > > あるいはその否定形で > f.gather {|i| i != "\n" }.each {|lines| pp lines } なるほど、それはあり得るかもしれません。 gather_each を使って gather を実装すると以下のようになるでしょうか。 module Enumerable def gather(&b) enum_for(:gather_each, b) end end gather_each なしで gather を実装できるかというとちょっとわか りません。 > 私としては最後の例が一番自然に見えるのですが、どうなのでしょうか。 このケースでは否定してもしなくても結果は同じなので自然に感じ るほうで書けばいいんじゃないでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]