GOOGLE ADS

miércoles, 13 de abril de 2022

obtener la dirección de un objeto lua

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 __tostringmé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.__tostringxpara obtener el formato que desea, por ejemplo, para eliminar "tabla".

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...