Funzioni anonime
Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 13 di 54.
Ora che hai capito che le funzioni possono essere memorizzate in variabili e passate da una parte all’altra, c’è un modo ancora più conciso per scriverle. Invece di assegnare sempre un nome a una funzione, puoi crearla direttamente dove ti serve. Si chiamano funzioni anonime.
Una funzione anonima è semplicemente una funzione senza nome. La definisci usando la parola chiave function, seguita immediatamente dai suoi parametri e dal corpo:
function(a, b)
return a + b
endQuesto crea un valore funzione che può essere usato subito. Le funzioni anonime sono particolarmente utili quando si passano funzioni come argomenti ad altre funzioni. Ricordi l’esempio di ordinamento personalizzato di prima? Ecco come appare con una funzione anonima:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Invece di definire una funzione con nome separata per il confronto, la funzione viene creata direttamente come secondo argomento di table.sort(). Questo rende il codice più compatto e mantiene la logica di ordinamento proprio nel punto in cui viene usata.
Sfida
FacileScrivi una funzione filterByThreshold che accetta numbers e threshold e restituisce una nuova tabella contenente solo i numeri maggiori della soglia.
L'editor contiene già una funzione di supporto, filter(list, keep): chiama keep(value) per ogni valore e restituisce una nuova tabella con i valori per i quali keep ha restituito true. Chiama filter e passa il controllo come funzione anonima scritta direttamente nella chiamata, come nella lezione quando ne passa una a table.sort(). Non memorizzare il controllo in una variabile e non assegnargli un nome.
Parametri:
numbers(table): Una tabella in stile lista contenente valori numericithreshold(number): Il valore minimo (escluso) per il filtraggio
Restituisce: Una tabella contenente solo i numeri maggiori della soglia (table)
Provalo tu
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- Scrivi il codice qui
end
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Iterazione avanzata delle tabelle
Iterare con pairs()Iterare con ipairs()pairs() vs. ipairs()Riepilogo - Scheda del personaggio2Altre funzioni della libreria table
table.concat()Costruzione di tabelle e unpack()table.sort()Ordinamento personalizzato con funzioniRiepilogo - Tabellone dei punteggi più alti3Concetti avanzati sulle funzioni
Restituire più valoriFunzioni variadiche (...)Funzioni come valori di prima classeFunzioni anonimeChe cos'è una closure?Riepilogo - Gestore di eventi sempliceEsercitati da solo: Compilatore Lua online