官术网_书友最值得收藏!

Eager processing with the Enum module

Having seen how recursion works in Elixir, we'll now show some examples of the abstractions that are built on top of it. We'll explore the Enum module, which contains a set of functions to work on collections. We've already seen some examples of collections in the Elixir's data types section, such as lists or maps. More generally, we can use the Enum module on collections that implement the Enumerable protocol.

We haven't yet covered protocols. We will do so in the Protocols section.

Taking the two examples from our Recursion section, let's see how they become incredibly simple to implement using the Enum module:

iex> Enum.map([2, 4, 6], &(&1 * 2))
[4, 8, 12]
iex> Enum.reduce([1, 2, 3], 1, &(&1 * &2))
6

The map function receives a collection and a lambda, and returns a new list where the lambda is applied to each element of the collection.

The reduce function receives a collection, an accumulator, and a lambda. The lambda receives the current element of the collection and the accumulator, and the result of this lambda is the accumulator for the following iteration. At the end of the iteration, reduce returns the final accumulator value.

We're using the capture operator to define a lambda. As we've previously hinted, you can also use it to capture named functions. In the following example, we're using the Integer.is_even/1 function to check which numbers are even in a collection:

iex> require Integer
Integer
iex> Enum.map([1, 2, 3], &Integer.is_even/1)
[false, true, false]

You'll see the Enum module being used in the application that we'll build throughout the book. For further usage of the Enum module, check its documentation at https://hexdocs.pm/elixir/Enum.html.

主站蜘蛛池模板: 洱源县| 沅江市| 伽师县| 黔南| 镇雄县| 湛江市| 专栏| 开封市| 凤山市| 宾阳县| 天门市| 抚松县| 怀宁县| 汤阴县| 杭锦旗| 漯河市| 搜索| 大竹县| 常山县| 临夏县| 台东市| 灵川县| 卢湾区| 德惠市| 永定县| 浮梁县| 兴仁县| 安国市| 罗城| 滕州市| 莱芜市| 淄博市| 奎屯市| 承德县| 雅江县| 安仁县| 扎兰屯市| 遵义市| 泸州市| 寿宁县| 神池县|