Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Реактивно програмиране / Supply

Преобразуване на supply

Потокът може да бъде преобразуван, преди да се включите към него, много подобно на списък. Методи като map и grep произвеждат нов поток, чиито стойности са преобразуваните:

my @out;
Supply.from-list(1, 2, 3).map(* * 10).tap(-> $v { @out.push($v) });
say @out; # [10 20 30]

map(* * 10) изгражда нов поток, който подава по десет пъти всяка първоначална стойност, а включването ги събира в @out.

grep филтрира потока, като пропуска нататък само онези стойности, за които блокът му е истина:

my @out;
Supply.from-list(1, 2, 3, 4, 5, 6).grep(* %% 2).tap(-> $v { @out.push($v) });
say @out; # [2 4 6]

Понеже всяко преобразуване връща още един поток, можете да ги свързвате, изграждайки малък конвейер, който откликва на струята:

my @out;
Supply.from-list(1..6).grep(* %% 2).map(* ** 2).tap(-> $v { @out.push($v) });
say @out; # [4 16 36]

Това е същият речник map/grep, който познавате от списъците, приложен към стойности, пристигащи във времето. Потокът върши тласкането; вашият конвейер оформя онова, което излиза.

Практика

Направете 1 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Supply   |   Тест — Преобразуване на supply


💪 Или преминете направо към упражненията в този раздел.