Синтаксис &(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))
Использование &
с сопоставлением арности:
Enum.map([1, 2, 3], &add_one/1)
Это просто говорит о том, что эта анонимная функция будет принимать только 1 аргумент, и этот аргумент следует применять к функции с именем add_one
, которая также является функцией 1 арности.
Таким образом, эти три примера выше одинаковы и все приведут к вызову add_one
для каждого аргумента.