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

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.

主站蜘蛛池模板: 延吉市| 雅江县| 高陵县| 侯马市| 四子王旗| 鸡东县| 盖州市| 河北省| 垣曲县| 威信县| 金乡县| 广德县| 沽源县| 班戈县| 五河县| 龙陵县| 山西省| 轮台县| 应城市| 贺州市| 鄂尔多斯市| 临汾市| 青阳县| 水城县| 阳城县| 常山县| 广州市| 尚义县| 奉贤区| 宁陵县| 同心县| 保定市| 榆树市| 高青县| 积石山| 海兴县| 怀仁县| 噶尔县| 喜德县| 泾川县| 措勤县|