Menu
Coddy logo textTech

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 argumento

L’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
end

select("#", ...) 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.

challenge icon

Sfida

Facile

Crea un array tipizzato scores: {number} con 85, 92 e 78.

  1. Stampa tutti i punteggi su una sola riga usando table.unpack.
  2. Stampa il punteggio più alto usando math.max e table.unpack.
  3. Definisci local function sum(...: number): number che somma tutti i suoi argomenti usando select("#", ...) e select(i, ...), poi stampa sum(table.unpack(scores)).
  4. 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)
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online