[#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:38395] Re: Enumerable#gather_each

From: Tanaka Akira <akr@...>
Date: 2009-05-09 08:18:21 UTC
List: ruby-dev #38395
In article <4d8a2fb40905082353l6be190cdx61201d083bebfeb4@mail.gmail.com>,
  ujihisa <ujihisa@gmail.com> 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]

In This Thread