Metatablas

Las metatablas son el método de Lua para crear objetos y alterar el comportamiento de operadores como +, -, [], etc.

Cada valor en Lua puede tener una metatabla. Esta metatabla es una tabla Lua ordinaria que define el comportamiento del valor original bajo ciertas operaciones especiales. Puede cambiar varios aspectos del comportamiento de las operaciones sobre un valor estableciendo campos específicos en su metatabla. Por ejemplo, cuando un valor no numérico es el operando de una suma, Lua busca una función en el campo ' "__add" de su metatabla. Si encuentra una, Lua llama a esta función para realizar la suma.

Llamamos eventos a las claves de una metatabla y metamétodos a los valores. En el ejemplo anterior, el evento es ' "add" y el metamétodo es la función que realiza la suma.

Las tablas y los datos de usuario completos tienen metatablas individuales (aunque varias tablas y datos de usuario pueden compartir sus metatablas). Los valores de todos los demás tipos comparten una única metatabla por tipo; es decir, hay una única metatabla para todos los números, otra para todas las cadenas, etc.

Una metatabla controla cómo se comporta un objeto en operaciones aritméticas, comparaciones de orden, concatenación, operación de longitud e indexación. Para cada una de estas operaciones Lua asocia una clave específica llamada evento. Cuando Lua realiza una de estas operaciones sobre un valor, comprueba si este valor tiene una metatabla con el evento correspondiente. Si es así, el valor asociado a esa clave (el metamétodo) controla cómo realizará Lua la operación.

Las metatablas controlan las operaciones que se enumeran a continuación. Cada operación se identifica por su nombre correspondiente. La clave de cada operación es una cadena con su nombre precedido de dos guiones bajos, '__'; por ejemplo, la clave de la operación "añadir" es la cadena ' "__add". La semántica de estas operaciones se explica mejor mediante una función Lua que describe cómo el intérprete ejecuta la operación.