Una funzione identità generica
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 62 di 80.
Ecco la funzione identità fatta nel modo giusto, come funzione generica:
local function identity<T>(value: T): T
return value
end<T> dopo il nome della funzione dichiara un parametro di tipo: un segnaposto che indica «un tipo qualsiasi, deciso a ogni chiamata». Nella firma usi T proprio come un tipo reale: il parametro è un T e la funzione restituisce un T.
Usare lo stesso T per l'input e l'output è tutto il trucco. Li collega tra loro. Chiama identity("hello") e il verificatore decide T = string per quella chiamata, quindi il risultato è una string. Chiama identity(42) e T = number, quindi il risultato è un number. Un solo corpo, ogni tipo, senza perdere nulla.
T è solo un nome convenzionale (abbreviazione di «Tipo»): <Item> o <Value> funzionano altrettanto bene. E, come sempre in Luau, le parentesi angolari esistono solo per il verificatore: a runtime, questa è la semplice funzione Lua function identity(value) return value end.
Sfida
FacileScrivi una funzione che restituisca qualsiasi valore mantenendone intatto il tipo.
- Scrivi
local function identity<T>(value: T): Tche restituiscavalue. - Dichiara
local luckyNumber: number = identity(7)elocal greeting: string = identity("Hello, Luau!"). - Stampa
luckyNumber, poigreeting.
Premi Esegui codice: l'output mostra 7 e Hello, Luau!.
Provalo tu
-- 1) identity<T>(value: T): T
-- 2) luckyNumber e greeting dalle chiamate a identity
-- 3) stampa entrambi
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