Luában minden értéknek lehet egy ún. metatáblája. Ez egy közönséges tábla adatszerkezet, amely az adott érték viselkedésére lehet kihatással. Például amikor egy nem numerikus érték az összeadás operátor egyik komponense, akkor az ahhoz az értékhez tartozó metatábla __add() függvénye hívódik meg, ha van ilyen. Egy metatábla kulcsai az adott esemény után kapják a nevüket. Az előző példában az esemény: add, a hozzá tartozó metafüggvény pedig az __add().
Egy értékhez tartozó metatáblát a getmetatable
függvénnyel
kérhetjük le. A táblák metatábláit pedig a setmetatable
segítségével adhatjuk meg. A többi típus metatáblája nem változtatható meg,
csak a C API-n keresztül.
A table és userdata típusú elemeknek külön-külön megadható egy-egy metatábla, azonban a többi típus elemei egy metatáblán osztoznak. Egy értéknek alapértelmezetten nincs metatáblája, csak a string könyvtár rendel metatáblát a string típushoz.
A metatáblák határozzák meg, hogy egy érték hogy viselkedik aritmetikai
műveletek, összehasonlító relációs operátorok, konkatenáció, hossz operátor és
indexelés esetén, valamint a tábláknál és userdata értékeknél a szemétgyűjtést
is szabályozhatjuk a metatáblák segítségével.
Az alábbi metafüggvények használhatók úgy, hogy a metatábla kulcsait két
aláhúzásjellel prefixeljük (__add()).