¿Qué es una Metatabla?
Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 16 de 54.
Una metatabla es simplemente una tabla Lua normal, pero tiene un propósito especial. Cuando adjuntas una metatabla a otra tabla (llamémosla la tabla "principal"), puedes cambiar cómo se comporta esa tabla principal cuando se realizan determinadas operaciones en ella.
Piensa en ello de esta manera: normalmente, si intentas sumar dos tablas usando el operador +, Lua no sabe qué hacer y te dará un error. Pero con una metatabla, puedes definir qué significa la suma para tus tablas. Podrías hacer que sume los valores correspondientes, concatene su contenido o haga cualquier otra cosa que tenga sentido para tu programa.
Las metatablas funcionan definiendo funciones especiales llamadas metamétodos. Estos metamétodos tienen nombres específicos que comienzan con dos guiones bajos, como __add para la suma o __index para buscar claves que faltan. Cuando Lua encuentra una operación en una tabla que tiene una metatabla, comprueba si la metatabla tiene el metamétodo correspondiente y lo utiliza para determinar qué debe suceder.
Este concepto abre posibilidades como crear tipos de datos personalizados con sus propios comportamientos, implementar patrones orientados a objetos, proteger las tablas de modificaciones no deseadas y mucho más. En las próximas lecciones, aprenderás a asociar metatablas a tablas y a usar metamétodos para personalizar su comportamiento.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo de control
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje4Introducción a las Metatablas
¿Qué es una Metatabla?setmetatable y getmetatableEl metamétodo __indexEl metamétodo __newindexEl metamétodo __tostringMetamétodos aritméticos - Parte 1Metamétodos aritméticos - Parte 2Resumen - Tablas de solo lectura2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altasPractica por tu cuenta: Compilador de Lua online