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

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.

主站蜘蛛池模板: 襄垣县| 宁城县| 桂东县| 建德市| 文山县| 泾川县| 西安市| 阆中市| 叙永县| 巩义市| 科技| 唐河县| 佛学| 宜春市| 麻阳| 龙南县| 阿图什市| 石阡县| 赤壁市| 丰都县| 竹北市| 灵宝市| 英山县| 祁东县| 自治县| 缙云县| 铜梁县| 万荣县| 横山县| 安国市| 辽宁省| 达拉特旗| 平顶山市| 大同县| 沁水县| 冕宁县| 平原县| 辽宁省| 荆门市| 上蔡县| 定远县|