Curso de Raku / Avanzado / Contenedores / Contenedores ordenados
Aplanamiento e itemización
Cuando colocas un array dentro de otro, Raku no fusiona automáticamente sus elementos. Examina el siguiente programa:
my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;
say @c.elems; # 2
say @c; # [[1 2 3] [4 5]]El array @c tiene solo dos elementos: los arrays
@a y @b. Raku mantiene cada contenedor como un
único elemento en lugar de derramar su contenido en el array externo. Lo
mismo sucede con un valor colocado entre otros:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Cuando realmente quieres una secuencia plana única, solicítalo
explícitamente con la rutina flat:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat(@a, @b); # (1 2 3 4 5)
say flat(@a, @b).elems; # 5Itemización
A veces quieres lo contrario: proteger un contenedor de ser aplanado,
incluso dentro de flat. La construcción $(...)
itemiza su argumento, lo marca como un único elemento. Compara
el ejemplo anterior con este:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Aquí, $(@a) mantiene @a como un solo
elemento, mientras que @b sigue siendo aplanado en sus dos
valores. Esta es la idea del sigilo $ una vez más: un
$ significa “trata esto como una sola cosa”.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Enlace con
:= | Quiz — Anidar
arrays →
💪 O ve directamente a los ejercicios de
esta sección.