Курс Raku / Розширені / Контейнери / Упорядковані контейнери
Вирівнювання та ітемізація
Коли ви кладете один масив усередину іншого, Raku не зливає їхні елементи автоматично. Розгляньмо таку програму:
my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;
say @c.elems; # 2
say @c; # [[1 2 3] [4 5]]Масив @c має лише два елементи — масиви @a
та @b. Raku зберігає кожен контейнер як один елемент, а не
висипає його вміст у зовнішній масив. Те саме стається зі значенням,
поставленим серед інших:
my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]Коли вам справді потрібна одна плоска послідовність, попросіть про
неї явно за допомогою підпрограми flat:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat(@a, @b); # (1 2 3 4 5)
say flat(@a, @b).elems; # 5Штучність
Іноді потрібно протилежне: захистити контейнер від сплощення, навіть
усередині flat. Конструкція $(...) робить свій
аргумент штучним — позначає результат як один елемент.
Порівняйте попередній приклад із цим:
my @a = 1, 2, 3;
my @b = 4, 5;
say flat($(@a), @b); # ([1 2 3] 4 5)Тут $(@a) зберігає @a як один елемент, тоді
як @b усе одно сплощується у свої два значення. Це знову та
сама ідея сигіла $: $ означає «розглядай це як
одну річ».
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Прив’язка з
:= | Тест — Вкладені
масиви →
💪 Або перейдіть одразу до вправ цього
розділу.