Курс языка программирования 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— простого числа или строки — приведет к ошибке проверки типа.
Навигация по курсу
← Светофор | Номера дней недели →