Курс по 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

Айтемизация (Itemization)

Понякога искате обратното: да защитите контейнер от изравняване, дори вътре в flat. Конструкцията $(...) айтемизира аргумента си — маркира резултата като единичен елемент. Сравнете предишния пример с този:

my @a = 1, 2, 3;
my @b = 4, 5;

say flat($(@a), @b); # ([1 2 3] 4 5)

Тук $(@a) запазва @a като един елемент, докато @b все още се изравнява до двете си стойности. Това е идеята на сигила $ отново: $ означава „третирай това като едно нещо”.

Практика

Направете 1 тест върху съдържанието на тази тема.

Навигация в курса

Свързване с :=   |   Тест — Влагане на масиви


💪 Или преминете направо към упражненията в този раздел.