【问题标题】:What does "&1" mean in elixir function?长生不老药函数中的“&1”是什么意思?
【发布时间】:2019-07-30 17:40:28
【问题描述】:

给定这个函数,&1 指的是什么?

Enum.map [1, 2, 3, 4], &(&1 * 2)

【问题讨论】:

标签: elixir


【解决方案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被每个参数调用。

    【讨论】:

      猜你喜欢
      • 2015-12-03
      • 2021-09-04
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多