美文网首页
打印lua table

打印lua table

作者: zero_0 | 来源:发表于2017-02-07 22:41 被阅读110次

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

    相关文章

      网友评论

          本文标题:打印lua table

          本文链接:https://www.haomeiwen.com/subject/ufnmittx.html