长生不老药函数中的“&1”是啥意思?
Posted
技术标签:
【中文标题】长生不老药函数中的“&1”是啥意思?【英文标题】:What does "&1" mean in elixir function?长生不老药函数中的“&1”是什么意思? 【发布时间】:2019-07-30 17:40:28 【问题描述】:给定这个函数,&1
指的是什么?
Enum.map [1, 2, 3, 4], &(&1 * 2)
【问题讨论】:
Why are there two kinds of functions in Elixir?的可能重复 How does the '&' operator work?的可能重复 【参考方案1】:&1
指回调函数将接收的第一个参数。 & 符号本身 (&
) 是捕获函数的简写。这就是您可以扩展该功能的方式。
Enum.map([1, 2, 3, 4], fn x -> x * 2 end)
fn ->
等于 &(...
x -> x
等于 ...(&1
可以在here找到快速参考
【讨论】:
【参考方案2】:elixir 中的&(1 + &1)
语法只是编写匿名函数的另一种方式。
鉴于上述情况:
fn(x) -> 1 + x end
等同于
&(1 + &1)
这只是编写匿名函数的另一种方式,通常在您执行小单元操作或只是调用另一个函数时使用。
每个&n
使用该语法时,指的是在该函数中调用的参数的位置。
所以:
fn(x, y, z) -> x + y + z end
这意味着如果您要使用简写 &
匿名函数语法:
x == &1
因为x
是第一个参数
y == &2
因为y
是第二个参数
z == &3
因为z
是第三个参数
表示这些参数的另一种方式是使用匿名函数 + arity 语法,它几乎充当委托人。
例如,假设您想要映射一个值列表并为每个值应用一个函数。使用基本的匿名函数语法,它看起来像:
Enum.map([1, 2, 3], fn(x) -> add_one(x) end)
使用带有参数捕获的&
(&1
)
Enum.map([1, 2, 3], &(add_one(&1))
将&
与arity 匹配一起使用:
Enum.map([1, 2, 3], &add_one/1)
简单地说,这个匿名函数将只接受 1 个参数,并且该参数应该应用于名为 add_one
的函数,它也是一个 1 元函数。
所以上面的三个例子是完全一样的,都会导致add_one
被每个参数调用。
【讨论】:
以上是关于长生不老药函数中的“&1”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章