typestar

Metamétodos en Lua

__add y __tostring enseñan operadores a tipos nuevos.

-- Metamethods teach operators new types: __add, __tostring.
local Vec = {}
Vec.__index = Vec

function Vec.new(x, y)
  return setmetatable({ x = x, y = y }, Vec)
end

Vec.__add = function(a, b)
  return Vec.new(a.x + b.x, a.y + b.y)
end

Vec.__tostring = function(v)
  return "(" .. v.x .. ", " .. v.y .. ")"
end

local step = Vec.new(1, 0) + Vec.new(0, 2)
print("Player moves " .. tostring(step))
print(tostring(step + Vec.new(3, 3)))

Cómo funciona

  1. Vec.__add corre cuando + encuentra dos vectores.
  2. __tostring alimenta a print y tostring.
  3. El constructor estampa cada tabla con setmetatable.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
430
Tokens
138
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 127 segundos.

Escribe este fragmento

Paso 2 de 3 en Metatablas; paso 18 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →