ヽ(´・肉・`)ノログ

How do we fighting without fighting?

Rubyのeach_consとeach_sliceはElixirではchunkでやる

Rubyには Enumerable#each_consEnumerable#each_slice という便利なメソッドがある.

Elixirで同じ振舞いをするには Enum.chunk/4 を使うとよい.

調べたこと

[1, 2, 3, 4, 5].each_cons(2).to_a  # => [[1, 2], [2, 3], [3, 4], [4, 5]]
[1, 2, 3, 4, 5].each_slice(2).to_a # => [[1, 2], [3, 4], [5]]

Elixirでも同じことをやりたいと思ったが,同じような役割を担っている Enumモジュール にはeach_xxxがみつからなかった.

調べてみると,Elixirの開発ML(elixir-lang-core)にて Enum.cons/3 というproposalがあり,最後に

`Enum.chunk` is probably what you are looking for. It covers Ruby’s `each_cons` and `each_slice` roughly

という返答があった.

Enum.chunk([1, 2, 3, 4, 5], 2, 1)     # => [[1, 2], [2, 3], [3, 4], [4, 5]]
Enum.chunk([1, 2, 3, 4, 5], 2, 2, []) # => [[1, 2], [3, 4], [5]]

なるほど.Enum.chunk/4 を使うと同じようなことができる.