Menu
Coddy logo textTech

Funzioni variadiche

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 27 di 73.

Hai usato i vararg ... di Lua per scrivere funzioni che accettano un numero qualsiasi di argomenti. Luau ti permette di specificare il tipo dei vararg, così ogni argomento passato viene controllato:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

...: number dichiara che ogni argomento aggiuntivo deve essere un numero: sum(1, "two") diventa un errore di tipo. Gli strumenti a runtime sono quelli che già conosci:

  • {...} raccoglie i vararg in un array (qui un {number})
  • select("#", ...) conta quanti argomenti sono arrivati
  • ... può essere passato direttamente a un'altra funzione, ad esempio math.max(...)

Come in Lua, ... deve essere l'ultimo parametro: i parametri regolari (tipizzati) vengono prima, mentre la coda variadica raccoglie il resto:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

Sfida

Facile

Crea una funzione chiamata sumAll che accetti un numero qualsiasi di argomenti number (...: number) e ne restituisca la somma come number.

Crea una funzione chiamata countValues che accetti un numero qualsiasi di argomenti string e restituisca quanti ne sono stati passati, come number: usa select("#", ...).

Crea una funzione chiamata joinWords che accetti un separator: string obbligatorio seguito da un numero qualsiasi di argomenti string e li restituisca uniti con il separatore (usa table.concat su {...}): tipo restituito string.

Chiama e stampa, ciascuno su una riga distinta:

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

Provalo tu

-- Scrivi il codice qui
-- sumAll(...: number): number       -- scorri {...}
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- poi stampa i cinque risultati
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