Una funzione identità generica
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 58 di 73.
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 certo tipo, deciso a ogni chiamata». All'interno della firma usi T esattamente come un tipo reale: il parametro è di tipo T e la funzione restituisce un valore di tipo T.
Usare lo stesso T per l'input e l'output è tutto il trucco. Li lega insieme. Chiama identity("hello") e il verificatore dei tipi decide che 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, non si perde nulla.
T è solo un nome convenzionale (abbreviazione di «Type»): <Item> o <Value> funzionano altrettanto bene. E come sempre in Luau, le parentesi angolari esistono solo per il verificatore: in fase di esecuzione questa è la semplice funzione Lua function identity(value) return value end.
Sfida
FacileCrea una funzione generica chiamata identity che:
- dichiari un parametro di tipo
T - accetti un parametro chiamato
valuedi tipoT - restituisca quel valore, con tipo restituito
T
Poi crea queste variabili tipizzate usando la tua funzione:
luckyNumberdi tiponumber: chiamaidentitycon7greetingdi tipostring: chiamaidentitycon"Hello, Luau!"isReadydi tipoboolean: chiamaidentitycontrue
Stampa quanto segue, ciascuno su una riga:
luckyNumbergreetingisReady- il risultato della chiamata a
identitycon"<code>generics" direttamente dentroprint - il risultato della chiamata a
identitycon99direttamente dentroprint
Provalo tu
-- Scrivi il codice qui
-- 1) definisci identity<T>(value: T): T
-- 2) crea luckyNumber, greeting e isReady usando chiamate a identity
-- 3) stampali, poi stampa identity(il testo esatto delle istruzioni) e identity(99)
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