Raku-Kurs / Fortgeschritten / Kontrollfluss
gather und take
Das Paar gather und take ist eine flexible
Möglichkeit, eine Liste aufzubauen. Du umschließt Code mit einem
gather-Block, und jedes Mal, wenn dieser Code
take aufruft, wird der Wert zur Liste hinzugefügt, die
gather erzeugt.
my @result = gather {
take 1;
take 2;
take 3;
};
say @result; # [1 2 3]Die drei take-Aufrufe liefern drei Werte, und
gather sammelt sie in der Liste, die in
@result gespeichert wird.
Die eigentliche Stärke dieses Paares zeigt sich, wenn die
take-Aufrufe über gewöhnlichen Kontrollfluss verteilt sind,
wie zum Beispiel eine Schleife mit einer Bedingung. Die Liste enthält
dann nur die Werte, die du bewusst genommen hast:
my @evens = gather for 1..10 {
take $_ if $_ %% 2;
};
say @evens; # [2 4 6 8 10]Hier läuft die Schleife über die Zahlen von 1 bis 10, aber nur die
geraden werden genommen, sodass @evens am Ende
2, 4, 6, 8, 10 enthält. (Der Operator %%
prüft, ob eine Zahl ganzzahlig teilbar ist.)
Diese Trennung macht gather/take so
praktisch: Der umgebende Code entscheidet, wann ein Wert
erzeugt wird, und gather sammelt stillschweigend alles, was
genommen wurde.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Übungen
Dieser Abschnitt enthält 3 Übungen. Sehen Sie sich alle Themen dieses Abschnitts an, bevor Sie mit den Übungen beginnen.