Курс языка программирования 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


💪 Или перейдите сразу к упражнениям этого раздела.