Kurso de Raku / Progresinta / Regofluo / Deklaraj prefiksoj
Maldiligento kaj fervoro
Iuj listoj en Raku estas komputataj nur kiam iliaj elementoj estas
bezonataj — ili estas maldiligentaj (lazy). La prefiksoj
lazy kaj eager ebligas al vi kontroli tion
eksplicite.
La prefikso eager devigas liston esti produktita
tutan samtempe, tuj:
my @squares = eager (1..3).map(* ** 2);
say @squares; # [1 4 9]Sen eager la map ankoraŭ produktus la
valorojn, sed eager garantias, ke ili ĉiuj estas komputataj
tie kaj tiam anstataŭ laŭbezone.
La prefikso lazy faras la malon: ĝi markas liston kiel
maldiligenta, tiel ke ĝiaj elementoj estas produktataj nur kiam tirataj.
Tio ebligas al listo esti koncepte senfina:
my $numbers = lazy (1 .. Inf);
say $numbers.is-lazy; # TrueLa metodo .is-lazy konfirmas, ke la listo ne provos
komputi ĉiujn siajn (senfinajn) elementojn anticipe.
Ĉi tiu konkreta ekzemplo estas ĝuste kazo kie Raku supozus
maldiligenton ĉiuokaze: nelimigita intervalo kiel 1 .. Inf
jam estas maldiligenta, do say (1 .. Inf).is-lazy presas
True sen la prefikso. Skribi lazy ĉi tie
ŝanĝas nenion — ĝi nur eksplicitigas la intencon. La prefikso pravigas
sian ekziston kiam vi volas maldiligentigi liston, kiu alie estus
komputata avide.
Plej ofte Raku elektas saĝe memstare — intervaloj kaj sekvencoj estas
maldiligentaj, ordinara atribuado al tabelo estas avida. Uzu ĉi tiujn
prefiksojn kiam vi bezonas superregi tiun elekton: eager
por devigi multekostan komputadon okazi nun, lazy por
prokrasti komputadon kiu povus esti granda aŭ senlima.
Kursa navigado
← Kvizo — do | sink kaj quietly →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.