Cursus Raku / Geavanceerd / Meer over ingebouwde types / Enumeraties / Exercises / Verkeerslichten
Oplossing: Verkeerslichten
Hier is een mogelijke oplossing voor de opgave.
Code
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}";🦋 Je kunt de broncode vinden in het bestand traffic-enum.raku.
Uitvoer
red is 0
amber is 1
green is 2Opmerkingen
my Light $currentis een gewone, veranderbare variabele — alleen beperkt tot het typeLight. Het toewijzen van de volgende constante schakelt het licht door, en het getal volgt elke keer de naam:0,1,2.$current++lijkt alsof het vanzelf naar het volgende licht zou moeten gaan, maar het mislukt met een typecontrole-fout.++behandelt de constante als een gewoon getal en geeft eenIntterug (redwordt1), en eenIntpast niet meer in het typeLight. Daarom verplaats je het licht door de volgende constante toe te wijzen, zoals hierboven.De typebeperking geldt voor elke toewijzing, niet alleen de eerste.
$currentaccepteertred,amberofgreen, maar het toewijzen van iets dat geenLightis — een kaal getal of een tekenreeks — zou een typecontrole-fout opleveren.