Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea 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: Person con nome "Alice" ed età 25
  • worker: Employee con nome "Bob", età 30 ed 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)
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online