Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Функційне програмування / Лямбди та замикання
Замикання
Замикання — це підпрограма, що захоплює змінні з області, у якій її було визначено, і тримає їх живими навіть після того, як ця область завершилася. Це дає підпрограмі власний приватний сталий стан.
Класичний приклад — лічильник:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3Змінну $n оголошено всередині make-counter.
Повернена підпрограма посилається на $n, тож замикається на
ній: кожен виклик count збільшує й повертає ту
саму $n, хоча сам make-counter
завершився давним-давно.
Кожен виклик make-counter створює свіжу $n,
тож окремі лічильники незалежні:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Замикання дозволяють функції нести стан без глобальної змінної й без об’єкта. Це функційний спосіб пам’ятати щось між викликами.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Тест — Лямбди | Тест — Замикання →
💪 Або перейдіть одразу до вправ цього розділу.