Array generici
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 64 di 80.
I generici diventano davvero utili quando si usano le tabelle. Sai già scrivere array tipizzati come {number} o {string}. All'interno di una funzione generica, il tipo dell'elemento può essere semplicemente T e {T} significa «un array di qualunque tipo risulti essere T».
Ecco l'esempio classico: recuperare il primo elemento di un array qualsiasi:
local function first<T>(items: {T}): T?
return items[1]
endPassa un {string} e il verificatore deduce T = string, quindi il risultato è una stringa. Passa un {number} e il risultato è un numero. Una sola funzione sostituisce un'intera famiglia di copie specifiche per tipo.
Osserva attentamente il tipo restituito: è T?, non T. Un array può essere vuoto e, in tal caso, items[1] è nil: il tipo opzionale che hai incontrato prima lo indica correttamente: «un T oppure nil». Il verificatore solleciterà chi chiama la funzione a gestire il caso nil prima di usare il risultato: è proprio il tipo di bug che vuoi individuare con un linguaggio tipizzato.
Sfida
FacileOttieni il primo elemento di qualsiasi array.
- Scrivi
local function first<T>(items: {T}): T?che restituisceitems[1]. - Dichiara
local fruits: {string} = {"apple", "banana"}elocal empty: {number} = {}. - Stampa
first(fruits), poifirst(empty).
Premi Esegui codice: l'output mostra apple e nil.
Provalo tu
-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} e un {number} vuoto
-- 3) stampa il primo elemento 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