Usare enum con unioni di valori letterali
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 58 di 80.
Le unioni di valori letterali si rivelano utili come parametri di funzione. Assegna a un parametro il tipo unione e il controllo dei tipi garantisce che la funzione venga chiamata solo con un membro valido:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ errore di tipo: non è un DirectionAll'interno della funzione, gestisci i membri in modo esaustivo con una catena if/elseif. Poiché il tipo limita l'input a quattro valori, controllarne tre e lasciare che else gestisca l'ultimo copre tutti i casi:
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
endUna particolarità: le stringhe provenienti dall'esterno, come io.read(), sono tipizzate come semplici string, perché il controllo dei tipi non può sapere cosa scriverà l'utente. L'operatore di conversione di tipo di Luau, ::, risolve il problema: value :: Type dice al controllo dei tipi di trattare il valore come quel tipo. La lezione sulle asserzioni di tipo, verso la fine di questa sezione, approfondisce le conversioni; per ora basta una riga:
local direction = io.read() :: DirectionUna conversione è una promessa, non un controllo: durante l'esecuzione non viene verificato alcun input. Nel codice di produzione, prima si convaliderebbe l'input; qui, invece, permette alle funzioni tipizzate di accettare facilmente l'input dell'utente.
Sfida
FacileTrasforma una direzione digitata dal giocatore in un'azione.
- Scrivi
type Direction = "up" | "down" | "left" | "right". - Scrivi
local function getAction(direction: Direction): stringche restituisca"Climb","Drop","Turn left"oppure"Turn right". - Leggi
local direction = io.read() :: Directione stampagetAction(direction).
Premi Esegui il codice: con l'input up, l'output mostra Climb.
Provalo tu
-- 1) tipo Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, poi stampa l'azione
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare parametri e valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriValori predefiniti per i booleaniFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate7Progetto: Gestore di attività tipizzato
Progetto: La struttura di un'attivitàFunzione per aggiungere un'attività2Tipi fondamentali
Numero, stringa e booleanoIl tipo 'any': una via di fugaIl tipo 'unknown'Tipi nil e opzionaliL’inferenza dei tipi in praticaAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi8Gli enum, secondo lo stile di Luau
Il pattern degli enum in LuauEnum numerici con le tabelleEnum di stringhe come unioniUsare enum con unioni di valori letteraliCongelare le tabelle costantiRiepilogo: gli enum, secondo lo stile di Luau3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con forme misteLeggere una grigliaCreare una grigliatable.unpackRiepilogo: array e mappeEsercitati da solo: Compilatore Luau online