__tostring
__tostring(a) --字符串输出 ,当调用tostring(obj)的时候,会先查找obj的元方法中的__tostring,如果有就调用,没有就会打印obj的内存地址。
使用方法如下:
LuaModuleNames={}
LuaModuleNames=setmetatable({},{
__tostring=function(LuaModuleNames)
local str=""
for k,v in pairs(LuaModuleNames) do
str=str .. k ..","
end
return str
end
})
function RegModule(modulename,path)
assert(not LuaModuleNames[modulename],"moduleName--> "..modulename .."is already Add")
LuaModuleNames[modulename]=true
end
RegModule("name")
RegModule("we")
print(LuaModuleNames)
print(tostring(LuaModuleNames))
递归打印table
function DumpTable(t,tablename,depth)
local output=""
output=string.format("DumpaTable [%s]:\n",tablename)
local function doDumpTable(t,pre,depth)
if depth==0 then return end
for k,v in pairs(t) do
output=output .. string.format("%s[%s](%s)=%s(%s)\n",
pre,
tostring(k),
type(k),
tostring(v),
type(v))
if type(v)==type({}) then
doDumpTable(v,pre.."\t",depth-1)
end
end
end
doDumpTable(t," ",depth or 3)
output=output.."end"
print(output)
return output
end
local test={
["tbl"]={
["tbl2"]={
["333"]={}
},
["test"]=function() end
},
["ttt"]=function() end
}
DumpTable(test,"test")
扩展:
结合原表的__tostring方法,实现C#中object的tostring()方法,例如:local test={},print(test.tostring(...))打印其中的数据结构