最近看了下Markdown,决定拿来记录下学习笔记。
参考这篇博客写的打印输出lua table。
要点是缩进对齐和防止栈溢出,
其中
local tab = string.rep("\t", tabcount)
tabcount = tabcount + 1
表示每加深一层table就加一个tab缩进。
测试过程中测试出了栈溢出的情况,暂时加了简单的处理,当子table超过一定层级后不再格式化更下面的table,只打印table的地址。
代码如下:
function FormatValue(val)
if type(val) == "string" then
return string.format("%q", val)
end
return tostring(val)
end
function FormatTable(t, tabcount)
tabcount = tabcount or 0
if tabcount > 5 then
--防止栈溢出
return "<table too deep>"..tostring(t)
end
local str = ""
if type(t) == "table" then
for k, v in pairs(t) do
local tab = string.rep("\t", tabcount)
if type(v) == "table" then
str = str..tab..string.format("[%s] = {", FormatValue(k))..'\n'
str = str..FormatTable(v, tabcount + 1)..tab..'}\n'
else
str = str..tab..string.format("[%s] = %s", FormatValue(k), FormatValue(v))..',\n'
end
end
else
str = str..tostring(t)..'\n'
end
return str
end
输出效果:
local t = {a=1, b={x=0, y=1, z=2,q={5,6,7}},
"test string", f=FormatValue}
print(FormatTable(t))
[1] = "test string",
["a"] = 1,
["f"] = function: 0x7fc1a7d063b0,
["b"] = {
["y"] = 1,
["x"] = 0,
["q"] = {
[1] = 5,
[2] = 6,
[3] = 7,
}
["z"] = 2,
}
网友评论