Usare una funzione generica
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 59 di 73.
Non devi mai dire a identity che cos'è T: il checker lo deduce da solo. Questa è l'inferenza dei tipi: a ogni 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 dedotto è altrettanto sicuro di un'annotazione scritta a mano: per il checker, word è una string, con completamento automatico completo e controllo degli errori.
Una differenza importante rispetto a TypeScript: TS ti consente di forzare il tipo nel punto della chiamata con identity<number>(5). Luau non supporta argomenti di tipo nel punto della chiamata. Quella riga non è una sintassi speciale, quindi Luau interpreta le parentesi angolari come confronti 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 in fase di esecuzione di un valore, quindi print(typeof(identity(12))) stampa number: il valore è passato attraverso la funzione generica senza alcuna modifica.
Sfida
FacileLa funzione generica identity della lezione precedente è già nel tuo editor. Metti a frutto la sua inferenza.
Crea tre variabili, lasciando che il verificatore inferisca T (non servono annotazioni):
word: chiamaidentitycon"Luau"count: chiamaidentitycon12flag: chiamaidentityconfalse
Stampa quanto segue, ciascuno su una riga separata:
word- il risultato di
typeof(word) count- il risultato di
typeof(count) flag- il risultato di
typeof(flag)
Provalo tu
-- La funzione generica identity della lezione precedente
local function identity<T>(value: T): T
return value
end
-- Scrivi il codice qui
-- 1) crea word, count e flag con chiamate a identity (lascia che T venga dedotto)
-- 2) stampa ogni valore seguito dal suo typeof
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 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