Курс 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 тест за змістом цієї теми.

Навігація курсом

Тест — Лямбди   |   Тест — Замикання


💪 Або перейдіть одразу до вправ цього розділу.