Курс Raku / Розширені / Докладніше про вбудовані типи / Перелічення 🆕 / Вправи / Світлофор
Розв’язання: Світлофор
Ось один із можливих варіантів розв’язання задачі.
Код
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— голого числа чи рядка, — стане помилкою перевірки типу.
Навігація курсом
← Світлофор | Номери днів тижня →