Corso di Raku / Avanzato / Altro sui tipi predefiniti / Enumerazioni / Exercises / Semafori
Soluzione: Semafori
Ecco una possibile soluzione.
Codice
enum Light <red amber green>;
my Light $current = red;
say "$current is {$current.value}";
$current = amber;
say "$current is {$current.value}";
$current = green;
say "$current is {$current.value}";🦋 Puoi trovare il codice sorgente nel file traffic-enum.raku.
Output
red is 0
amber is 1
green is 2Commenti
my Light $currente’ una variabile ordinaria e mutabile, vincolata solo al tipoLight. Assegnare la costante successiva fa avanzare il semaforo, e il numero segue il nome ogni volta:0,1,2.$current++sembra che dovrebbe passare automaticamente al colore successivo, ma fallisce con un errore di controllo del tipo.++tratta la costante come il suo numero semplice e restituisce unInt(reddiventa1), e unIntnon soddisfa piu’ il tipoLight. Quindi si avanza il semaforo assegnando la costante successiva, come mostrato sopra.Il vincolo di tipo si applica a ogni assegnazione, non solo alla prima.
$currentaccettera’red,amberogreen, ma assegnare qualcosa che non e’ unLight— un numero nudo o una stringa — causerebbe un errore di controllo del tipo.