Corso di Raku / Avanzato / Contenitori / Contenitori ordinati
Appiattimento e itemizzazione
Quando metti un array dentro un altro, Raku non unisce automaticamente i loro elementi. Esamina il seguente 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]]L’array @c ha solo due elementi: gli array
@a e @b. Raku mantiene ogni contenitore come
un singolo elemento piuttosto che riversarne il contenuto nell’array
esterno. Lo stesso accade per un valore posto tra altri:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Quando vuoi effettivamente una singola sequenza piatta, richiedila
esplicitamente con la 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; # 5Itemizzazione (Itemization)
A volte vuoi l’opposto: proteggere un contenitore dall’essere
appiattito, anche dentro flat. Il costrutto
$(...) itemizza il suo argomento — contrassegna il
risultato come un singolo elemento. Confronta l’esempio precedente con
questo:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Qui, $(@a) mantiene @a come un unico
elemento, mentre @b viene comunque appiattito nei suoi due
valori. Questa è ancora l’idea del sigillo $: un
$ significa “tratta questo come una singola cosa”.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Binding con
:= | Quiz — Annidare
array →
💪 Oppure vai direttamente agli esercizi di questa
sezione.