Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Реактивне програмування / react і whenever / Вправи / Два whenever
Розв’язання: Два whenever
Ось одне з можливих розв’язань задачі.
Код
my $deposits = Supply.from-list(100, 50, 200);
my $withdrawals = Supply.from-list(30, 120);
my $balance = 0;
react {
whenever $deposits { $balance += $_ }
whenever $withdrawals { $balance -= $_ }
}
say $balance;🦋 Знайдіть програму у файлі two-whenevers.raku.
Вивід
200Коментарі
Два блоки
wheneverстежать за двома іменованими потоками й реагують по-різному: надходження додаються, зняття віднімаються. Один блок react, два струмені, дві виразно різні реакції — саме заради цього й тримають поwheneverна джерело.Блок react завершується лише тоді, коли завершаться обидва потоки, тож баланс остаточний ще до друку:
100 + 50 + 200 - 30 - 120дає200. Оскільки додавання й віднімання комутують, переплетення двох струменів на результат не впливає.Тут обидва потоки віддають свої значення миттєво, один струмінь за одним. У житті події банківського рахунку надходять розтягнутими в часі — надходження зараз, зняття за годину, — і два струмені сплітаються, як у демонстрації Два таймери. Код при цьому лишається точно таким самим: блок react виконує те тіло
whenever, що відповідає кожній події в міру її надходження.
Навігація курсом
← Два whenever | await →