Utiliser des Enums d'unions littérales
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 54 sur 73.
Les unions de littéraux prennent tout leur sens en tant que paramètres de fonction. Typez un paramètre avec l'union et le vérificateur garantit que la fonction n'est appelée qu'avec un membre valide :
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ erreur de type : pas un DirectionÀ l'intérieur de la fonction, gérez les membres de manière exhaustive avec une chaîne if/elseif. Étant donné que le type limite l'input à four valeurs, vérifier les trois premières et laisser else prendre la dernière couvre l'ensemble des cas :
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endUn détail à prendre en compte : les chaînes venant de l'extérieur — comme io.read() — sont typées comme un simple string plain, car le vérificateur ne peut pas savoir ce qu'un utilisateur va saisir. Le cast :: que vous avez appris plus tôt lui indique de traiter la valeur comme votre type enum :
local direction = io.read() :: DirectionUn cast est une promesse, pas une vérification — à l'exécution, rien ne vérifie l'input. Un code de production validerait d'abord ; ici, cela permet aux fonctions typées d'accepter proprement les saisies de l'utilisateur.
Défi
FacileCréez le type d'union de littéraux Direction avec les membres "up", "down", "left" et "right".
Créez une fonction move qui prend direction: Direction et affiche Moving [direction]...
Créez une fonction getMovementDescription qui prend direction: Direction, renvoie un string, et gère chaque membre avec if/elseif/else :
"up"→Going upward"down"→Going downward"left"→Turning left"right"→Turning right
Lisez une ligne saisie par l'utilisateur avec io.read() et transtypez-la en Direction avec ::. Ensuite :
- appelez
moveavec la direction - affichez le résultat de
getMovementDescriptionpour cette même direction
Essayez vous-même
-- Écrivez le code ici
-- 1) définir le type Direction
-- 2) écrire move et getMovementDescription (if/elseif/else)
-- 3) lire l'entrée : local direction = io.read() :: Direction
-- 4) appeler move, puis afficher la description
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées8Les Enums, à la manière de Luau
Le pattern Enum dans LuauEnums numériques avec des tablesEnums de chaînes comme unionsUtiliser des Enums d'unions littéralesGeler les tables de constantesRécapitulatif : Les Enums, à la manière de Luau3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps