Tipi letterali
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 33 di 73.
Tipi come string consentono qualsiasi stringa, ma a volte solo pochi valori esatti hanno senso. Un tipo letterale usa il valore stesso come tipo:
local mode: "dark" = "dark" -- è consentita solo la stringa "dark"
local locked: true = true -- è consentito solo il valore booleano trueDa soli, i tipi con un solo valore sono una curiosità. Combinati con le unioni, diventano uno degli strumenti più utili di Luau: un insieme rigorosamente controllato di valori consentiti:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ errore di tipo!Ora, un errore di battitura come "nort" o un valore non valido come "diagonal" viene rilevato mentre modifichi il codice; con una semplice string, passerebbe senza problemi e causerebbe un errore in fase di esecuzione, sempre che tu sia abbastanza fortunato da accorgertene.
I tipi letterali distinguono tra maiuscole e minuscole e richiedono una corrispondenza esatta: "North" non corrisponde a "north". I letterali stringa sono il caso più comune, ma i letterali booleani e (nelle versioni più recenti di Luau) numerici funzionano allo stesso modo. Questo schema, un’unione di letterali stringa, è anche il modo in cui Luau sostituisce gli enum di altri linguaggi, come vedrai in un capitolo successivo.
Sfida
FacileCrea tre alias di tipo unione di valori letterali:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
Dichiara, usando gli alias:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
Crea una funzione movePlayer(direction: Direction): string che restituisca "Moving [direction]" e una funzione updateGameState(state: GameState): string che restituisca "Game state: [state]".
Stampa, ciascuno su una riga distinta:
movePlayer(playerDirection)updateGameState(currentState)- il valore di
selectedDifficulty
Provalo tu
-- Scrivi il codice qui
-- definisci Direction / GameState / Difficulty come unioni di letterali
-- dichiara playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- stampa i tre risultati
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
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 i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni 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 tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappeEsercitati da solo: Compilatore Luau online