¿Qué es una Metatabla?
Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 16 de 54.
Una metatabla es simplemente una tabla de 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 ciertas operaciones sobre ella.
Piénsalo 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 sus contenidos 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 faltantes. 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 tablas de modificaciones no deseadas y mucho más. En las próximas lecciones, aprenderás cómo adjuntar metatablas a las tablas y usar metamétodos para personalizar su comportamiento.
Hoja de referencia
Una metatable es una tabla de Lua normal que se puede adjuntar a otra tabla para cambiar su comportamiento en ciertas operaciones.
Las metatables utilizan funciones especiales llamadas metamétodos con nombres que comienzan con dos guiones bajos:
__add- define el comportamiento de la suma__index- define el comportamiento para buscar claves inexistentes
Cuando se realiza una operación en una tabla con una metatable, Lua busca el metamétodo correspondiente y lo utiliza para determinar el comportamiento.
Las metatables permiten:
- Crear tipos de datos personalizados con comportamientos específicos
- Implementar patrones orientados a objetos
- Proteger las tablas de modificaciones no deseadas
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 Logic & Flow
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 altas