Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Ламбди | Тест — Затваряния →
💪 Или преминете направо към упражненията в този
раздел.