Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Funkcionālā programmēšana / Iteratori
Iteratora protokols
Katra vērtība, pa kuru var ciklot — saraksts, diapazons, masīvs —,
spēj jums pasniegt iteratoru ar metodi .iterator.
Iteratoram ir viena būtiska metode, pull-one, kas katrā
izsaukumā atgriež nākamo vērtību:
my $it = (10, 20, 30).iterator;
say $it.pull-one; # 10
say $it.pull-one; # 20
say $it.pull-one; # 30Kad vērtības beidzas, pull-one īsta elementa vietā
atgriež īpašu bāku — IterationEnd. Prasot tam pašam
$it vēl vienu vērtību, to var ieraudzīt:
say $it.pull-one =:= IterationEnd; # TrueOperators =:= pārbauda, vai tas ir tas pats
objekts, un tieši tā šo bāku atpazīst. Šī detaļa ir svarīga
ciklā, kur izvilktā vērtība jāpatur un jāpārbauda. Ja jūs to
piešķirat ar =, vērtība nonāk konteinerā
un salīdzinājums beigās skatās uz konteineru, nevis uz
IterationEnd. Zāles ir saistīt ar
:=, lai mainīgais vienkārši būtu tas, ko atgriezis
pull-one:
my $it = <a b c>.iterator;
loop {
my $v := $it.pull-one; # saistām, nevis piešķiram
last if $v =:= IterationEnd;
say $v;
}Cikls izdrukā a, b, c un tad
apstājas. Tieši to zem pārsega jūsu vietā dara for cikls:
tas izsauc .iterator tam, pa ko ciklojat, un turpina
izsaukt pull-one, līdz sastop IterationEnd. Ar
rokām to uzrakstīt vajag reti, taču, izdarot to vienreiz, kļūst redzams,
ka Raku patiesībā ciklo nevis pa sarakstiem, bet pa iteratoriem.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Iteratori | Viktorīna — Iteratora protokols →
💪 Vai arī dodieties tieši uz šīs
sadaļas vingrinājumu.