Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Реактивно програмиране / react и whenever / Exercises / Два 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 →