Anonyme Funktionen werden in Elixir häufig verwendet, sowohl allein als auch als Rückgabewerte und als Argumente in Funktionen höherer Ordnung wie Enum.map/2:
Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]
Funktionen sind in Elixir Bürger erster Klasse:
Anonyme Funktionen werden mit dem Schlüsselwort fn erstellt und mit einem Punkt (.) aufgerufen:
function_variable = fn n -> n + 1 end
function_variable.(1)
# => 2
Anonyme Funktionen können auch mit der Capture-Kurzschreibweise & erstellt werden.
Das & am Anfang kennzeichnet den Beginn des Capture-Ausdrucks.
&1, &2 und so weiter verweisen auf die Positionsargumente der anonymen Funktion.
# Instead of:
fn x, y -> abs(x) + abs(y) end
# We can write:
&(abs(&1) + abs(&2))
Mit dem &-Capture-Operator kannst du auch eine bestehende benannte Funktion capturen:
# Instead of:
fn a, b -> a <= b end
# We can capture the function using its name and arity:
&<=/2
Anonyme Funktionen sind in Elixir Closures. Sie können auf Variablen zugreifen, die sich im Gültigkeitsbereich befinden, wenn die Funktion definiert wird. Variablen, die innerhalb einer anonymen Funktion zugewiesen werden, sind außerhalb von ihr nicht zugänglich:
y = 2
square = fn ->
x = 3
x * y
end
square.()
# => 6
x
# => ** (CompileError): undefined function x/0