Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Свързване с
:= | Тест — Влагане на
масиви →
💪 Или преминете направо към упражненията в този
раздел.