setmetatable e getmetatable
Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 17 di 54.
Ora che hai capito cosa sono concettualmente le metatabelle, è il momento di imparare a lavorarci concretamente. Lua fornisce due funzioni essenziali per questo: setmetatable() per associare una metatabella a una tabella e getmetatable() per recuperarla.
Per associare una metatabella a una tabella, usa setmetatable(). Questa funzione accetta due argomenti: la tabella che vuoi modificare (la tabella principale) e la metatabella che vuoi associarle:
local myTable = {name = "Alice"}
local myMetatable = {}
setmetatable(myTable, myMetatable)In questo esempio, myMetatable è ora collegata a myTable. Per ora la metatabella è vuota, ma questo stabilisce il collegamento tra le due tabelle. La funzione setmetatable() restituisce anche la tabella principale, consentendoti di concatenare l'operazione se necessario.
Per recuperare la metatabella associata a una tabella, usi getmetatable():
local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable) -- Output: trueQuesta funzione restituisce la metatable se ne è associata una, oppure nil se la tabella non ha una metatable. È utile quando devi controllare o modificare la metatable di una tabella dopo che è stata impostata.
Comprendere queste due funzioni è la base per tutto il lavoro con le metatabelle in Lua. Una volta che saprai collegare e recuperare le metatabelle, sarai pronto a definire metametodi che modificano il comportamento delle tue tabelle.
Sfida
FacileScrivi una funzione attachMetatable che accetta mainTable e metaTable e restituisce true se la metatable è stata associata correttamente.
Usa setmetatable() per associare la metatable alla tabella principale, quindi verifica l'associazione usando getmetatable().
Logica:
- Associa
metaTableamainTableusandosetmetatable() - Recupera la metatable associata usando
getmetatable() - Confronta la metatable recuperata con la
metaTableoriginale - Restituisci
truese corrispondono,falsealtrimenti
Parametri:
mainTable(table): La tabella a cui verrà associata la metatablemetaTable(table): La metatable da associare
Valore restituito: true se la metatable è stata associata e verificata correttamente, false altrimenti (booleano)
Provalo tu
function attachMetatable(mainTable, metaTable)
-- 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 personaggio4Introduzione alle metatabelle
Che cos’è una metatabella?setmetatable e getmetatableIl metametodo __indexIl metametodo __newindexIl metametodo __tostringMetametodi aritmetici - Parte 1Metametodi aritmetici - Parte 2Riepilogo - Tabella di sola lettura2Altre funzioni della libreria table
table.concat()Costruzione di tabelle e unpack()table.sort()Ordinamento personalizzato con funzioniRiepilogo - Tabellone dei punteggi più altiEsercitati da solo: Compilatore Lua online