Tipi intersezione
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 34 di 73.
Le unioni indicano che un valore è di un tipo o di un altro. I tipi intersezione indicano il contrario: la e commerciale & combina le forme delle tabelle in un tipo che ha tutti i campi di ogni parte:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- un Person deve avere ENTRAMBI i campi
local user: Person = {
name = "Alice",
age = 25,
}Se ometti age, il controllore segnala un errore: un’intersezione è una condizione "e", mai una scelta tra alternative. Questo ti permette di creare forme complesse a partire da componenti piccole e riutilizzabili: definisci tipi specifici per aspetti distinti, poi uniscili secondo necessità:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Una nota importante su Luau: interseca forme di tabelle (e tipi funzione), non tipi primitivi. Qualcosa come number & string non ha senso, perché nessun valore può essere entrambe le cose contemporaneamente. Quando vuoi "questa forma più quell’altra", & è lo strumento giusto.
A runtime, naturalmente, un Person è solo una normale tabella Lua: l’intersezione esiste solo per il controllore.
Sfida
FacileCrea due alias di forme: HasName con un campo name: string e HasAge con un campo age: number.
Crea Person come intersezione di HasName & HasAge.
Crea HasEmail con un campo email: string e Employee come intersezione di tutti e tre: HasName & HasAge & HasEmail.
Dichiara:
user: Personcon nome"Alice"ed età25worker: Employeecon nome"Bob", età30ed email"bob@company.com"
Crea displayPerson(person: Person): string che restituisce "Name: [name], Age: [age]" e displayEmployee(employee: Employee): string che restituisce "Name: [name], Age: [age], Email: [email]".
Stampa displayPerson(user) e displayEmployee(worker) su righe separate.
Provalo tu
-- Scrivi il codice qui
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- dichiara user e worker, scrivi le due funzioni di visualizzazione,
-- stampa displayPerson(user) e displayEmployee(worker)
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