Menu
Coddy logo textTech

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: true

Questa 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.

challenge icon

Sfida

Facile

Scrivi 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 metaTable a mainTable usando setmetatable()
  • Recupera la metatable associata usando getmetatable()
  • Confronta la metatable recuperata con la metaTable originale
  • Restituisci true se corrispondono, false altrimenti

Parametri:

  • mainTable (table): La tabella a cui verrà associata la metatable
  • metaTable (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
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 Logica e flusso

Esercitati da solo: Compilatore Lua online