Cursus Raku / Geavanceerd / Containers / Geordende containers
Afvlakken en itemisatie
Wanneer je een array in een ander array plaatst, voegt Raku hun elementen niet automatisch samen. Bekijk het volgende programma:
my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;
say @c.elems; # 2
say @c; # [[1 2 3] [4 5]]Het array @c heeft slechts twee elementen: de arrays
@a en @b. Raku bewaart elke container als een
enkel item in plaats van de inhoud uit te storten in het buitenste
array. Hetzelfde gebeurt voor een waarde die tussen andere wordt
geplaatst:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Wanneer je daadwerkelijk een enkele platte reeks wilt, vraag er dan
expliciet om met de flat routine:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat(@a, @b); # (1 2 3 4 5)
say flat(@a, @b).elems; # 5Itemisatie (Itemization)
Soms wil je het tegenovergestelde: een container beschermen tegen
flattening, zelfs binnen flat. De $(...)
constructie itemiseert zijn argument — het markeert het
resultaat als een enkel item. Vergelijk het vorige voorbeeld met
dit:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Hier houdt $(@a) het array @a als één
element, terwijl @b nog steeds wordt platgeslagen tot zijn
twee waarden. Dit is het $ sigil-idee opnieuw: een
$ betekent “behandel dit als een enkel ding”.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Binding met
:= | Quiz — Geneste
arrays →
💪 Of ga direct naar de oefeningen in
deze sectie.