Курс языка программирования Raku / Продвинутый уровень / Порядок выполнения / gather и
take / Exercises / Повторение
каждого числа
Решение: Повторение каждого числа
Вот возможное решение задачи.
Код
my @result = gather for 1..4 -> $n {
take $n for 1..$n;
};
say @result;🦋 Исходный код можно найти в файле collect-the-evens.raku.
Вывод
[1 2 2 3 3 3 4 4 4 4]Комментарии
Ничто не ограничивает количество вызовов
takeза одну итерацию. Здесь внутреннийtake $n for 1..$nвыполняетtakeразное количество раз на каждом проходе — именно эта гибкость делаетgather/takeмощнее обычногоmap.Внешний цикл использует именованную переменную
-> $nнамеренно. Если бы мы написали внутренний цикл с$_, внутреннийforпереназначил бы$_на свой собственный счётчик, и мы брали бы счётчик вместо текущего числа.gatherпросто собирает все взятые значения по порядку, поэтому@resultсодержит1, затем два2, затем три3, затем четыре4.