Анонімні функції часто використовують в Elixir окремо, як повернені значення та як аргументи функцій вищого порядку, як-от Enum.map/2:
Enum.map([1, 2, 3], fn n -> n + 1 end)
# => [2, 3, 4]
У Elixir до функцій ставляться як до обʼєктів першого класу:
Анонімні функції створюють за допомогою ключового слова fn і викликають із крапкою (.):
function_variable = fn n -> n + 1 end
function_variable.(1)
# => 2
Анонімні функції також можна створювати за допомогою скороченого запису захоплення &.
Початковий & позначає початок виразу захоплення.
&1, &2 тощо вказують на позиційні аргументи анонімної функції.
# Instead of:
fn x, y -> abs(x) + abs(y) end
# We can write:
&(abs(&1) + abs(&2))
Оператор захоплення & також можна використати, щоб захопити наявну іменовану функцію:
# Instead of:
fn a, b -> a <= b end
# We can capture the function using its name and arity:
&<=/2
Анонімні функції в Elixir - це замикання. Вони мають доступ до змінних, які перебувають в області видимості на момент визначення функції. Змінні, присвоєні всередині анонімної функції, недоступні поза нею:
y = 2
square = fn ->
x = 3
x * y
end
square.()
# => 6
x
# => ** (CompileError): undefined function x/0