Curso de Raku / Avanzado / Más sobre los tipos integrados / Enumeraciones / Exercises / Semáforos
Solución: Semáforos
Aquí tienes una posible solución a la tarea.
Código
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}";🦋 Puedes encontrar el código fuente en el archivo traffic-enum.raku.
Salida
red is 0
amber is 1
green is 2Comentarios
my Light $currentes una variable ordinaria y mutable — solo restringida al tipoLight. Asignar la siguiente constante avanza la luz, y el número sigue al nombre cada vez:0,1,2.$current++parece que debería avanzar a la siguiente luz por sí solo, pero falla con un error de verificación de tipo.++trata la constante como su número simple y devuelve unInt(redse convierte en1), y unIntya no encaja en el tipoLight. Así que avanzas la luz asignando la siguiente constante, como se muestra arriba.La restricción de tipo se aplica a cada asignación, no solo a la primera.
$currentaceptaráred,amberogreen, pero asignar algo que no sea unLight— un número suelto o una cadena — sería un error de verificación de tipo.