Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Реактивное программирование / Supply
Преобразование supply
Supply можно преобразовать до подключения к нему — почти как список.
Методы вроде map и grep создают
новый supply, значениями которого будут
преобразованные:
my @out;
Supply.from-list(1, 2, 3).map(* * 10).tap(-> $v { @out.push($v) });
say @out; # [10 20 30]map(* * 10) строит новый supply, выдающий каждое
исходное значение, умноженное на десять, а подключение собирает их в
@out.
grep фильтрует supply, пропуская лишь те значения, для
которых его блок истинен:
my @out;
Supply.from-list(1, 2, 3, 4, 5, 6).grep(* %% 2).tap(-> $v { @out.push($v) });
say @out; # [2 4 6]Поскольку каждое преобразование возвращает очередной supply, их можно составлять в цепочку, выстраивая небольшой конвейер, который реагирует на поток:
my @out;
Supply.from-list(1..6).grep(* %% 2).map(* ** 2).tap(-> $v { @out.push($v) });
say @out; # [4 16 36]Это тот же словарь map/grep, что вы знаете по спискам, только применённый к значениям, приходящим во времени. Supply проталкивает значения, а ваш конвейер задаёт форму того, что выходит наружу.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест — Supply | Тест — Преобразование supply →
💪 Или перейдите сразу к упражнениям этого
раздела.