打印lua table

最近看了下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 ""..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,
}

你可能感兴趣的:(打印lua table)