Курс языка программирования Raku / Продвинутый уровень / Порядок выполнения
gather и take
Пара gather и take — это гибкий способ
построения списка. Вы оборачиваете некоторый код в блок
gather, и каждый раз, когда этот код вызывает
take, значение добавляется в список, который создаёт
gather.
my @result = gather {
take 1;
take 2;
take 3;
};
say @result; # [1 2 3]Три вызова take дают три значения, и gather
собирает их в список, сохранённый в @result.
Настоящая сила этой пары проявляется, когда вызовы take
распределены по обычному потоку управления, например в цикле с условием.
Тогда список содержит только те значения, которые вы решили взять:
my @evens = gather for 1..10 {
take $_ if $_ %% 2;
};
say @evens; # [2 4 6 8 10]Здесь цикл проходит по числам от 1 до 10, но берутся только чётные,
поэтому @evens содержит 2, 4, 6, 8, 10.
(Оператор %% проверяет, делится ли число нацело.)
Это разделение и делает gather/take таким
удобным: окружающий код решает, когда создать значение, а
gather тихо собирает всё, что было взято.
Практика
Пройдите 1 тест по содержанию этой темы.
Упражнения
В этом разделе 3 упражнения. Прежде чем приступать к практике, изучите все темы раздела.
Навигация по курсу
← Решение: Сопоставление по типу | Повторение каждого числа →