Usare una funzione generica
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 63 di 80.
Non dici mai a identity che cosa sia T: il controllo lo determina da solo. Questa è l’inferenza dei tipi: a ogni punto di chiamata, Luau esamina l’argomento e determina T:
local word = identity("Luau") -- T dedotto come string
local count = identity(12) -- T dedotto come number
local flag = identity(false) -- T dedotto come booleanOgni chiamata è indipendente: T può essere una stringa in una riga e un numero in quella successiva. Il risultato inferito è sicuro quanto un’annotazione scritta a mano: per il controllo, word è una string, con completamento automatico completo e controllo degli errori.
Una differenza importante rispetto a TypeScript: TS ti permette di forzare il tipo nel punto di chiamata con identity<number>(5). Luau non ammette argomenti di tipo nel punto di chiamata. Quella riga non è una sintassi speciale, quindi Luau interpreta le parentesi angolari come operatori di confronto minore di/maggiore di e il codice non funziona. Se vuoi specificare esplicitamente il tipo, annota invece la variabile:
local count: number = identity(12)Puoi osservare l’inferenza in azione con uno strumento familiare: typeof restituisce il nome del tipo a runtime di un valore, quindi print(typeof(identity(12))) stampa number: il valore ha attraversato la funzione generica senza subire alcuna modifica.
Sfida
FacileLascia che il verificatore determini T a ogni chiamata.
- Sotto la funzione, memorizza
identity("Oslo")inlocal cityeidentity(42)inlocal floors, senza annotazioni. - Stampa
typeof(city), poitypeof(floors).
Premi Esegui codice: l'output mostra string e number.
Provalo tu
-- La funzione generica identity della lezione precedente
local function identity<T>(value: T): T
return value
end
-- 1) city e floors dalle chiamate a identity, senza annotazioni
-- 2) stampa il typeof di ciascuno
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 tipi3Tabelle 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 mappe6Tipizzare le forme delle tabelle
Annotazioni inline delle formeAlias di tipo per le formeProprietà opzionaliForme e tabelle libere a confrontoEstendere le formeAggiungere metodi alle formeSelf e metodi con i due puntiRiepilogo: definire le forme delle tabelle9Generics: una prima occhiata
Il problema risolto dai genericsUna funzione identità genericaUsare una funzione genericaArray genericiAlias di tipo genericiRiepilogo: funzioni genericheEsercitati da solo: Compilatore Luau online