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
Vec.__addcorre cuando + encuentra dos vectores.__tostringalimenta a print y tostring.- El constructor estampa cada tabla con
setmetatable.
Palabras clave y builtins usados aquí
endfunctionlocalprintreturnsetmetatabletostring
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.
Paso 2 de 3 en Metatablas; paso 18 de 27 en Fundamentos del lenguaje.