Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Funkcia programado / Lambdoj kaj fermaĵoj
Fermaĵoj
Fermaĵo estas subprogramo, kiu kaptas variablojn el la amplekso, en kiu ĝi estis difinita, kaj tenas ilin vivaj eĉ post kiam tiu amplekso finiĝis. Tio donas al la subprogramo sian propran privatan, daŭran staton.
La klasika ekzemplo estas nombrilo:
sub make-counter {
my $n = 0;
return sub { ++$n };
}
my &count = make-counter;
say count(); # 1
say count(); # 2
say count(); # 3La variablo $n estas deklarita ene de
make-counter. La redonita subprogramo referencas
$n, do ĝi fermiĝas super ĝi: ĉiu voko de count
inkrementas kaj redonas la saman $n,
kvankam make-counter mem finiĝis antaŭ longe.
Ĉiu voko de make-counter kreas freŝan $n,
do apartaj nombriloj estas sendependaj:
my &a = make-counter;
my &b = make-counter;
say a(); # 1
say a(); # 2
say b(); # 1Fermaĵoj permesas al funkcio porti staton sen tutmonda variablo kaj sen objekto. Ili estas la funkci-programada maniero memori ion inter vokoj.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Kvizo — Lambdoj | Kvizo — Fermaĵoj →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.