Cuando imprime ciertos tipos en lua (como funciones y tablas), obtiene el nombre del tipo y una dirección, como se muestra a continuación:
> tab = {}
> print(tab)
table: 0xaddress
Creé una clase simple como se muestra a continuación y me gustaría anular el __tostring
método de manera similar. ¿Cómo obtengo la dirección del objeto que quiero imprimir?
Aquí está mi clase. Me gustaría print(pair)
imprimir Pair: 0xaddress
. Obviamente, este es un ejemplo trivial, pero el concepto es útil:
Pair = {}
Pair.__index = Pair
function Pair.create()
local p = {}
setmetatable(p, Pair)
p.x = 0
p.y = 0
return p
end
function Pair:getx()
return self.x
end
function Pair:gety()
return self.y
end
function Pair:sety(iny)
self.y=iny
end
function Pair:setx(inx)
self.x=inx
end
Solución del problema
Aquí hay una manera hokey de hacerlo:
Pair.__tostringx = function (p)
Pair.__tostring = nil
local s = "Pair ".. tostring(p)
Pair.__tostring = Pair.__tostringx
return s
end
Pair.__tostring = Pair.__tostringx
> print(p)
Pair table: 0x7fe469c1f900
Puede hacer más manipulación de cadenas en el interior Pair.__tostringx
para obtener el formato que desea, por ejemplo, para eliminar "tabla".
No hay comentarios.:
Publicar un comentario