当您在lua中打印某些类型(例如函数和表)时,您将获得类型的名称和地址,如下所示:
> tab = {}
> print(tab)
table: 0xaddress
Run Code Online (Sandbox Code Playgroud)
我已经创建了一个简单的类,如下所示,我想类似地覆盖该__tostring
方法.如何获取要打印的对象的地址?
这是我的课.我想print(pair)
打印出来Pair: 0xaddress
.显然这是一个微不足道的例子,但这个概念很有用:
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
Run Code Online (Sandbox Code Playgroud)
这是一个很好的方法:
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
Run Code Online (Sandbox Code Playgroud)
你可以在里面做更多的字符串操作Pair.__tostringx
来获得你想要的格式,例如删除"table".