Raku-Kurs / Fortgeschritten / Container / Geordnete Container
Flattening und Itemisierung
Wenn du ein Array in ein anderes steckst, verschmilzt Raku ihre Elemente nicht automatisch. Betrachte das folgende Programm:
my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;
say @c.elems; # 2
say @c; # [[1 2 3] [4 5]]Das Array @c hat nur zwei Elemente: die Arrays
@a und @b. Raku behält jeden Container als
einzelnes Element bei, statt seinen Inhalt in das äußere Array
auszuschütten. Dasselbe passiert, wenn ein Wert zwischen anderen
platziert wird:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Wenn du tatsächlich eine einzelne flache Sequenz haben willst, frage
explizit danach mit der Routine flat:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat(@a, @b); # (1 2 3 4 5)
say flat(@a, @b).elems; # 5Itemisierung
Manchmal willst du das Gegenteil: einen Container davor schützen,
abgeflacht zu werden, auch innerhalb von flat. Das
Konstrukt $(...) itemisiert sein Argument — es
markiert das Ergebnis als einzelnes Element. Vergleiche das vorherige
Beispiel mit diesem:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Hier behält $(@a) @a als ein Element bei,
während @b weiterhin in seine beiden Werte abgeflacht wird.
Das ist wieder die Idee des $-Sigils: Ein $
bedeutet “behandle dies als eine einzelne Sache”.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Bindung mit
:= | Quiz —
Verschachtelte Arrays →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.