通过map和reduce来理解函数捕获

Els*_*yed 1 reduce dictionary functional-programming elixir

我是Elixir语言的初学者,所以在吹嘘的例子中

iex> Enum.reduce([1, 2, 3], 0, &+/2)
      6

iex> Enum.map([1, 2, 3], &(&1 * 2))
     [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)

在reduce方法中,我理解我们捕获第二个arg,然后我们将列表值添加到它,直到到达List的末尾.

但在地图方法中,我无法理解捕获的工作原理?

参考

http://elixir-lang.org/getting-started/recursion.html

Jus*_*ood 6

map/2并且reduce/2是两个不同的功能.

map/2 获取一些值和一个带有单个值的函数,并将该函数应用于集合中的每个元素,从而有效地将其转换为列表.

reduce/2取一些值和一个带2个参数的函数.该函数的第一个参数是集合中的元素,而第二个参数是累加器.因此,该功能可将您的收藏减少到单个值.

使用语法&+/2,这不会捕获第二个参数.它+在两个参数上调用函数.的/2是表示,它具有为2的元数(它需要2个参数).以下面的代码为例.

iex(1)> fun = &+/2
&:erlang.+/2
iex(2)> fun.(1,2)
3
Run Code Online (Sandbox Code Playgroud)

在这里,我们将+函数设置为变量fun.然后我们可以将该函数应用于我们的参数以获取值.

另一种语法&(&1 * 2)创建一个匿名函数,它接受我们唯一的参数(由...表示&1)并将其乘以2.初始值&只表示它是一个匿名函数.

iex(3)> fun2 = &(&1 * 2)
#Function<6.118419387/1 in :erl_eval.expr/5>
iex(4)> fun2.(5)
10
Run Code Online (Sandbox Code Playgroud)

它们是类似的概念,但略有不同.