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, esiste un modo ancora più conciso per scriverle. Invece di dare 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 un nome separato 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 dove viene utilizzata.
Sfida
FacileScrivi una funzione filterByThreshold che accetta numbers e threshold e restituisce una nuova tabella contenente solo i numeri maggiori della soglia.
Usa table.insert() con un approccio basato su una funzione anonima per filtrare i numeri. Crea la logica di filtraggio inline senza definire una funzione separata con nome.
Logica:
- Crea una tabella risultato vuota
- Scorri la tabella dei numeri
- Per ogni numero, usa una funzione anonima per verificare se supera la soglia
- Se il controllo restituisce true, aggiungi il numero alla tabella risultato
- Restituisci la tabella risultato filtrata
Parametri:
numbers(tabella): una tabella in formato lista contenente valori numericithreshold(numero): il valore minimo (escluso) per il filtraggio
Restituisce: una tabella contenente solo i numeri maggiori della soglia (tabella)
Provalo tu
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