Menu
Coddy logo textTech

O Metamétodo __tostring

Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 20 de 54.

Quando você imprime uma tabela em Lua, você normalmente vê algo pouco útil como table: 0x5f8a20 — apenas um endereço de memória. O metamétodo __tostring permite que você altere esse comportamento, definindo exatamente o que deve ser exibido quando sua tabela for convertida em uma string.

Este metamétodo é particularmente útil para depuração e para criar uma saída mais limpa. Quando o Lua precisa converter sua tabela em uma string (como ao usar print()), ele verifica se a tabela possui uma metatabela com um campo __tostring. Se possuir, o Lua chama essa função e usa seu valor de retorno em vez da representação padrão.

Veja como implementar:

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

setmetatable(vector, meta)

print(vector)  -- Saída: Vector(3, 4)

A função __tostring recebe a tabela como seu argumento e deve retornar uma string. Neste exemplo, ela constrói uma string formatada mostrando os valores x e y do vetor em um formato legível.

Isso torna seu código muito mais fácil de trabalhar. Em vez de ver endereços de memória enigmáticos durante a depuração, você obtém informações significativas sobre o que sua tabela contém.

challenge icon

Desafio

Fácil

Escreva uma função createPoint que receba as coordenadas x e y e retorne uma tabela de ponto com uma representação de string personalizada.

Crie uma tabela com os campos x e y, anexe uma metatabela com o metamétodo __tostring e retorne o resultado da conversão da tabela para uma string usando tostring().

Lógica:

  • Crie uma tabela com as chaves x e y definidas para as coordenadas fornecidas
  • Crie uma metatabela com __tostring que retorne uma string no formato "Point(x, y)"
  • Anexe a metatabela à tabela de ponto usando setmetatable()
  • Retorne tostring(point) para obter a representação de string personalizada

Parâmetros:

  • x (number): A coordenada x do ponto
  • y (number): A coordenada y do ponto

Retorna: A representação de string personalizada do ponto no formato "Point(x, y)" (string)

Folha de consulta

O metamétodo __tostring permite que você personalize como uma tabela é exibida quando convertida para uma string. Por padrão, imprimir uma tabela mostra um endereço de memória como table: 0x5f8a20.

Quando o Lua converte uma tabela para uma string (como com print()), ele verifica se a tabela possui uma metatabela com um campo __tostring. Se estiver presente, o Lua chama essa função e usa seu valor de retorno.

A função __tostring recebe a tabela como seu argumento e deve retornar uma string:

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

setmetatable(vector, meta)

print(vector)  -- Saída: Vector(3, 4)

Você também pode converter explicitamente uma tabela para uma string usando tostring(), o que invocará o metamétodo __tostring se estiver definido.

Experimente você mesmo

function createPoint(x, y)
    -- Escreva o código aqui
end
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow