Lua 打印一个能输出table的函数

要求有一个table,里面有嵌套的table也能输出,输出后的代码复制到程序中运行也不报错

例如给出的table如下:

local pets = {
  ["cat"] = {
    ["count"] = 1,
    ["names"] = {
    "2", 
    "3",
    },
  },
  ["dog"] = {
    ["count"] = 20,
    ["names"] = {
    "233", 
    "34",
    },
  },
}

下面是我贴出的代码,注释方面是我自己的理解可能有点乱

Lua 打印一个能输出table的函数

测试table如下:

Lua 打印一个能输出table的函数

运行结果如下:

Lua 打印一个能输出table的函数

将运行结果带入原table中,程序输出一样未报错。

以下是源代码:

local key = ""

function PrintTable(table, level)      --table是表名,level是嵌套表的层级
    level = level or 1                   --层级不为nil则返回层级,最少为1
    local suo_Jin = ""                    --缩进
    --每一个层级缩进两格
    for i = 1, level do
        suo_Jin = suo_Jin.."  "
    end    
    --遇到不为空字符串
    if key ~= "" then
        --if level == 1
        print(suo_Jin.."[".."\""..key.."\"".."]".." ".." = ".." ".."{")
    --遇到空的字符串
    else
        print(suo_Jin.."{")
    end
    key = ""
 
    for k, v in pairs(table) do
        --如果是嵌套的table
        if type(v) == "table" then            
            key = k
            PrintTable(v, level + 1)
            --在判断是不是string类型
            elseif type(v) == "string" then
                local value = string.format("%s\"%s\",", suo_Jin.."  ", tostring(v))
                print(value)
                --index = index + 1
        --不是嵌套的table
        else
            --让三个量按照给定的格式输出
            local value = string.format("%s".."[".."\"".."%s".."\"".."]".." = ".."%s" , suo_Jin .. "  ", tostring(k), tostring(v).." ,")
            print(value)
            --index = index + 1
        end            
    end
    --先打印一下level的值,用level来判断是不是table最后一个值
    --print("2222222222222222222  level = " .. level)
    if level ~= 1 then
        print(suo_Jin.."},")
    else
        print(suo_Jin.."}")
    end
    
end


local pets = {
  ["cat"] = {
    ["count"] = 1,
    ["names"] = {
    "2", 
    "3",
    },
  },
  ["dog"] = {
    ["count"] = 20,
    ["names"] = {
    "233", 
    "34",
    },
  },
}

PrintTable(pets)