Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Reaktiva programado / react kaj whenever / whenever

Kvizo — whenever kaj done

Kion presas la jena programo?

my @out;

react {
    whenever Supply.from-list(1, 2, 3) {
        @out.push($_);
        done if $_ == 2;
    }
    whenever Supply.from-list(10, 20) {
        @out.push($_);
    }
}

say @out;
1[1 2]
0[1 2 10 20]
0[1 2 3 10 20]
0[10 20]

La unua whenever puŝas 1, poste 2 — kaj ĉe 2 ĝi vokas done. La decida punkto estas, ke done finas la tutan blokon react, ne nur sian propran whenever: la cetero de la unua supply (3) kaj la tuta dua supply (10, 20) estas fortranĉitaj antaŭ ol ili estas liveritaj. Do @out tenas nur [1 2]. Se done nur silentigus sian propran fluon, vi vidus [1 2 10 20] — sed unu done haltigas ĉiujn reagojn samtempe.

Kursa navigado

Kvizo — whenever   |   Supply difinitaj ekstere