0x01 背景
很多时候,大家仍习惯print的方式观察变量值,而在Lua里,没有现成的table打印方法
0x02 SHOW ME THE CODE
local function dumpTable(self, depth, as_key)
depth = depth or 1
local self_type = type(self)
if self_type == "table" and depth > 0 then
local pieces = {}
local first = true
for k, v in pairs(self) do
local key_str = dumpTable(k, depth - 1, true)
local value_str = dumpTable(v, depth - 1)
if first then
table.insert(pieces, key_str .. "=" .. value_str)
first = false
else
table.insert(pieces, ", " .. key_str .. "=" .. value_str)
end
end
if as_key then
return "[{" .. table.concat(pieces) .. "}]"
else
return "{" .. table.concat(pieces) .. "}"
end
elseif self_type == "string" then
if as_key then
return self
else
return '"' .. self .. '"'
end
elseif self_type == "userdata" then
if as_key then
return "[" .. "[#userdata#]" .. "]"
else
return "[#userdata#]"
end
else
if as_key then
return "[" .. tostring(self) .. "]"
else
return tostring(self)
end
end
end
-- 使用方法
dumpTable(tb, 1)
dumpTable(tb, 3)