Raku kurss / Pielikums 🆕 / Plūsma un funkcijas / Apakšprogrammas un funkcionālais stils / Exercises / Augošs uzkrājējs
Risinājums: Augošs uzkrājējs
Šeit ir iespējams risinājums uzdevumam.
Kods
sub make-accumulator($start) {
my $total = $start;
return -> $amount { $total += $amount };
}
my $acc = make-accumulator(100);
say $acc(10);
say $acc(25);
say $acc(-5);🦋 Atrodiet programmu failā accumulator.raku.
Izvade
110
135
130Komentāri
Atgrieztais bloks noslēdzas pār
$total: šis mainīgais dzīvo starp izsaukumiem, tāpēc katrs izsaukums atceras iepriekšējā summu.$total += $amountgan atjaunina augošo summu, gan to atgriež, un tieši to izdrukā katrssay:110, tad135, tad130.Cits variants summu tur paša bloka iekšienē,
statemainīgajā. Atšķirībā no parastamystatemainīgais tiek inicializēts tikai vienreiz — pirmajā bloka izpildes reizē — un tad savu vērtību patur turpmākajos izsaukumos:sub make-accumulator($start) { return -> $amount { state $total = $start; $total += $amount }; } my $acc = make-accumulator(100); say $acc(10); say $acc(25); say $acc(-5);
Katrs
make-accumulatorizsaukums rada svaigu bloku ar savustate $total, tāpēc atsevišķi uzkrājēji paliek neatkarīgi — un slēgums pār$startkatram joprojām piegādā savu sākuma vērtību.