Menu
Coddy logo textTech

setmetatable y getmetatable

Parte de la sección Logic & Flow del Journey de Lua de Coddy — lección 17 de 54.

Ahora que entiendes qué son las metatablas conceptualmente, es hora de aprender cómo trabajar realmente con ellas. Lua proporciona dos funciones esenciales para esto: setmetatable() para adjuntar una metatabla a una tabla, y getmetatable() para recuperarla.

Para adjuntar una metatabla a una tabla, se utiliza setmetatable(). Esta función toma dos argumentos: la tabla que desea modificar (la tabla principal) y la metatabla que desea adjuntarle:

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

En este ejemplo, myMetatable ahora está adjunta a myTable. La metatable en sí está vacía por ahora, pero esto establece la conexión entre las dos tablas. La función setmetatable() también devuelve la tabla principal, lo que permite encadenar la operación si es necesario.

Para obtener la metatabla asociada a una tabla, utiliza getmetatable():

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Salida: true

Esta función devuelve la metatabla si hay una adjunta, o nil si la tabla no tiene metatabla. Esto es útil cuando necesitas comprobar o modificar la metatabla de una tabla después de que haya sido establecida.

Comprender estas dos funciones es la base de todo el trabajo con metatablas en Lua. Una vez que puedas adjuntar y recuperar metatablas, estarás listo para definir metamétodos que cambien el comportamiento de tus tablas.

challenge icon

Desafío

Fácil

Escribe una función attachMetatable que reciba mainTable y metaTable y devuelva true si la metatabla se adjuntó correctamente.

Usa setmetatable() para adjuntar la metatabla a la tabla principal, luego verifica la unión usando getmetatable().

Lógica:

  • Adjunta metaTable a mainTable usando setmetatable()
  • Recupera la metatabla adjunta usando getmetatable()
  • Compara la metatabla recuperada con la metaTable original
  • Devuelve true si coinciden, false de lo contrario

Parámetros:

  • mainTable (table): La tabla a la que se le adjuntará la metatabla
  • metaTable (table): La metatabla a adjuntar

Devuelve: true si la metatabla se adjuntó y verificó correctamente, false de lo contrario (boolean)

Hoja de referencia

Lua proporciona dos funciones esenciales para trabajar con metatables:

setmetatable() - Adjunta una metatable a una tabla. Toma dos argumentos: la tabla principal y la metatable a adjuntar. Devuelve la tabla principal.

local myTable = {name = "Alice"}
local myMetatable = {}

setmetatable(myTable, myMetatable)

getmetatable() - Recupera la metatable adjunta a una tabla. Devuelve la metatable si hay una adjunta, o nil si la tabla no tiene metatable.

local retrievedMeta = getmetatable(myTable)
print(retrievedMeta == myMetatable)  -- Salida: true

Pruébalo tú mismo

function attachMetatable(mainTable, metaTable)
    -- Escribe el código aquí
end
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow