Треки
/
Elixir
Elixir
/
Салабус
/
Анонімні функції
Ан

Анонімні функції у Elixir

4 вправи

Про концепцію Анонімні функції

Анонімні функції часто використовують в 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
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Анонімні функції

Практика заблокована

Розблокуйте ще 1 вправу, щоб практикувати концепцію Анонімні функції