Menu
Coddy logo textTech

El metamétodo __tostring

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

Cuando imprimes una tabla en Lua, normalmente ves algo poco útil como table: 0x5f8a20; simplemente una dirección de memoria. El metamétodo __tostring te permite cambiar este comportamiento definiendo exactamente qué debe mostrarse cuando tu tabla se convierte en una cadena.

Este metamétodo es particularmente útil para la depuración y para crear una salida más limpia. Cuando Lua necesita convertir tu tabla a una cadena (como cuando se usa print()), comprueba si la tabla tiene una metatabla con un campo __tostring. Si es así, Lua llama a esa función y utiliza su valor de retorno en lugar de la representación predeterminada.

Aquí tienes cómo implementarlo:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- Salida: Vector(3, 4)

La función __tostring recibe la tabla como su argumento y debe devolver una cadena. En este ejemplo, construye una cadena formateada que muestra los valores x e y del vector en un formato legible.

Esto hace que sea mucho más fácil trabajar con tu código. En lugar de ver direcciones de memoria crípticas durante la depuración, obtienes información significativa sobre lo que contiene tu tabla.

challenge icon

Desafío

Fácil

Escribe una función createPoint que tome las coordenadas x e y y devuelva una tabla de punto con una representación de cadena personalizada.

Crea una tabla con los campos x e y, adjunta una metatabla con el metamétodo __tostring y devuelve el resultado de convertir la tabla a una cadena usando tostring().

Lógica:

  • Crea una tabla con las claves x e y establecidas en las coordenadas proporcionadas
  • Crea una metatabla con __tostring que devuelva una cadena en el formato "Point(x, y)"
  • Adjunta la metatabla a la tabla de punto usando setmetatable()
  • Devuelve tostring(point) para obtener la representación de cadena personalizada

Parámetros:

  • x (number): La coordenada x del punto
  • y (number): La coordenada y del punto

Devuelve: La representación de cadena personalizada del punto en el formato "Point(x, y)" (string)

Hoja de referencia

El metamétodo __tostring te permite personalizar cómo se muestra una tabla cuando se convierte a una cadena de texto. Por defecto, imprimir una tabla muestra una dirección de memoria como table: 0x5f8a20.

Cuando Lua convierte una tabla a una cadena (como con print()), comprueba si la tabla tiene una metatabla con un campo __tostring. Si está presente, Lua llama a esa función y utiliza su valor de retorno.

La función __tostring recibe la tabla como argumento y debe devolver una cadena:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- Salida: Vector(3, 4)

También puedes convertir explícitamente una tabla a una cadena usando tostring(), lo cual invocará el metamétodo __tostring si está definido.

Pruébalo tú mismo

function createPoint(x, y)
    -- 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