Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Ламбди и затваряния / Exercises / Брояч
Решение: Брояч
Ето едно възможно решение на задачата.
Код
sub make-counter($step) {
my $n = 0;
return sub { $n += $step };
}
my &count = make-counter(10);
say count();
say count();
say count();🦋 Намерете програмата във файла counter.raku.
Изход
10
20
30Коментари
Затварянето улавя две неща от
make-counter: параметъра$stepи частната променлива$n. И двете остават живи, след катоmake-counterсе върне.Всяко извикване добавя
$stepкъм$nи връща новата сума. Брояч, изграден с друга стъпка, би се придвижвал вместо това с нея.