ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

Enumerator#| を定義してパイプライン演算子もどき

気持ちはパイプラインになれる。

class Enumerator
  def |(f)
    self.map(&f).to_enum
  end
end

[1, 2, 3].to_enum | ->(s) { s * 2 } | ->(s) { s + 10 }
#=> #<Enumerator: [12, 14, 16]:each>

ポイントとしては、EnumeratorがEnumeratorを返すメソッドにしないとパイプラインを繋げない...

Proc#curry などと組み合わせて気持ちを関数にできるかもしれない。

追記

Enumerable#| でいいかともおもったが、すでに Array#| があるのでいろいろ不都合っぽい。別の記号ならいいかもしれない。