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 esempiomath.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-cSfida
FacileCrea 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:
sumAll(5, 10, 15)sumAll(1, 2, 3, 4, 5)countValues("a", "b", "c", "d")joinWords("-", "apple", "banana", "cherry")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
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