Che cos’è una metatabella?
Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 16 di 54.
Una metatable è semplicemente una normale tabella Lua, ma ha uno scopo speciale. Quando associ una metatable a un'altra tabella (chiamiamola tabella "principale"), puoi modificare il comportamento di quella tabella principale quando vengono eseguite determinate operazioni su di essa.
Pensala così: normalmente, se provi a sommare due tabelle usando l'operatore +, Lua non sa cosa fare e ti darà un errore. Ma con una metatabella, puoi definire cosa significa l'addizione per le tue tabelle. Puoi fare in modo che sommi i valori corrispondenti, concateni i loro contenuti o faccia qualsiasi altra cosa abbia senso per il tuo programma.
I metatable funzionano definendo funzioni speciali chiamate metodi metamorfici. Questi metodi metamorfici hanno nomi specifici che iniziano con due caratteri di sottolineatura, come __add per l'addizione o __index per cercare chiavi mancanti. Quando Lua incontra un'operazione su una tabella che ha un metatable, controlla se il metatable contiene il metodo metamorfico corrispondente e lo usa per determinare cosa dovrebbe accadere.
Questo concetto apre la strada a possibilità come creare tipi di dati personalizzati con comportamenti propri, implementare schemi orientati agli oggetti, proteggere le tabelle da modifiche indesiderate e molto altro. Nelle prossime lezioni imparerai come collegare metatabelle alle tabelle e usare i metametodi per personalizzarne il comportamento.
Provalo tu
Questa lezione non include una sfida di codice.
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