Курс 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 →
💪 Або перейдіть одразу до вправ цього розділу.