Курс 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


💪 Або перейдіть одразу до вправ цього розділу.