Курс по Raku / Напреднали / Повече за вградените типове / Изброявания 🆕 / Exercises / Светофар
Решение: Светофар
Ето едно възможно решение на задачата.
Код
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}";🦋 Можете да намерите пълния код във файла traffic-enum.raku.
Резултат
red is 0
amber is 1
green is 2Коментари
my Light $currentе обикновена, изменяема променлива — ограничена само до типаLight. Присвояването на следващата константа придвижва светлината и числото следва името всеки път:0,1,2.$current++изглежда, че трябва да премине към следващата светлина автоматично, но се проваля с грешка при проверка на типа.++третира константата като обикновено число и връщаInt(redстава1), аIntвече не отговаря на типаLight. Затова преместваме светлината, като присвояваме следващата константа, както по-горе.Ограничението на типа се прилага при всяко присвояване, не само при първото.
$currentще приемеred,amberилиgreen, но присвояването на нещо, което не еLight— голо число или низ — би било грешка при проверка на типа.