Az Elixirben a névtelen függvényeket gyakran használjuk önmagukban, visszatérési értékként, és magasabb rendű függvények, például az Enum.map/2 argumentumaként is:
Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]
Az Elixirben a függvények első osztályú állampolgárok:
A névtelen függvényeket a fn kulcsszóval hozzuk létre, és egy ponttal (.) hívjuk meg:
function_variable = fn n -> n + 1 end
function_variable.(1)
# => 2
A névtelen függvényeket a & capture-rövidítéssel is létrehozhatjuk.
A kezdeti & jelöli a capture-kifejezés kezdetét.
A &1, &2 és így tovább a névtelen függvény pozicionális argumentumaira utalnak.
# Instead of:
fn x, y -> abs(x) + abs(y) end
# We can write:
&(abs(&1) + abs(&2))
A & capture-operátorral meglévő nevesített függvényeket is capture-ölhetünk:
# Instead of:
fn a, b -> a <= b end
# We can capture the function using its name and arity:
&<=/2
Az Elixirben a névtelen függvények closure-ök. Hozzáférnek mindazokhoz a változókhoz, amelyek a függvény definiálásakor scope-ban vannak. Azok a változók, amelyeknek egy névtelen függvényen belül adunk értéket, azon kívül nem érhetők el:
y = 2
square = fn ->
x = 3
x * y
end
square.()
# => 6
x
# => ** (CompileError): undefined function x/0