Kurso de Raku / Progresinta / Pli pri la enkonstruitaj tipoj / Enumeracioj / Exercises / Trafiklumo
Solvo: Trafiklumo
Jen ebla solvo de la tasko.
Kodo
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}";🦋 Vi povas trovi la fontkodon en la dosiero traffic-enum.raku.
Eligo
red is 0
amber is 1
green is 2Komentoj
my Light $currentestas ordinara, ŝanĝebla variablo — nur limigita al la tipoLight. Atribui la sekvan konstanton antaŭenigas la lumon, kaj la nombro sekvas la nomon ĉiufoje:0,1,2.$current++aspektas kvazaŭ ĝi paŝus al la sekva lumo memstare, sed ĝi malsukcesas kun tipkontrola eraro.++traktas la konstanton kiel ĝian nudan nombron kaj redonasInt(redfariĝas1), kajIntne plu konvenas al la tipoLight. Do vi movas la lumon atribuante la sekvan konstanton, kiel supre.La tipa limigo validas por ĉiu atribuo, ne nur por la unua.
$currentakceptosred,amberaŭgreen, sed atribui ion, kio ne estasLight— nudan nombron aŭ ĉenon — estus tipkontrola eraro.