table.unpack e argomenti variabili
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 20 di 73.
A volte hai dei valori in un array ma ti servono come valori separati: per esempio, per passare ogni elemento come argomento distinto. A questo serve table.unpack: restituisce tutti gli elementi di un array, separati.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (una línea, tres valores)
print(math.max(table.unpack(scores))) -- 92 — cada elemento se convirtió en un argumentoL’immagine speculare sono i vararg: una funzione che accetta un numero qualsiasi di argomenti tramite .... Hai già visto ... in Lua: Luau ti permette di specificarne il tipo, così ogni valore ricevuto deve corrispondere:
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...) restituisce quanti argomenti sono arrivati, mentre select(i, ...) restituisce gli argomenti dalla posizione i in poi: usato come singolo valore in un’espressione, equivale di fatto all’“i-esimo argomento”.
Le due funzionalità si combinano: sum(table.unpack(scores)) espande direttamente l’array nella funzione vararg: la risposta di Luau al modello di chiamata con espansione che si trova in altri linguaggi. table.unpack legge l’array senza modificarlo.
Sfida
FacileCrea un array tipizzato scores: {number} con 85, 92 e 78.
- Stampa tutti i punteggi su una sola riga usando
table.unpack. - Stampa il punteggio più alto usando
math.maxetable.unpack. - Definisci
local function sum(...: number): numberche somma tutti i suoi argomenti usandoselect("#", ...)eselect(i, ...), poi stampasum(table.unpack(scores)). - Stampa
sum(10, 20)per mostrare che la stessa funzione funziona con argomenti semplici.
Provalo tu
-- Scrivi il codice qui
-- 1) dichiara scores: {number} = {85, 92, 78}
-- 2) stampa print(table.unpack(scores)) e il math.max dei valori di scores estratti
-- 3) definisci sum(...: number): number usando select, poi stampa sum(table.unpack(scores))
-- 4) stampa sum(10, 20)
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 mappeEsercitati da solo: Compilatore Luau online