lua table打印

function table.tostring(t, forStr, tPt)
    if type(t) == "string" or type(t) == "number" then
        return t
    elseif type(t) ~= "table" then
        return type(t)
    end
    local oForStr = forStr or ""
    local cForStr = forStr and forStr .. "\t" or "\t"
    local szRet = forStr and "{\n" or "\n{\n"
    local function formatPrint(key, value)
        local function dealWithKey()
            if "number" == type(key) then
                szRet = szRet .. cForStr .. "[" .. key .. "]" .. " = "
            elseif "string" == type(key) then
                szRet = szRet .. cForStr .. "[\"" .. key .. "\"]" .. " = "
            elseif "table" == type(key) then
                if key == t then
                    szRet = szRet .. cForStr .. "[self]" .. " = "
                else
                    szRet = szRet .. cForStr .. "[" .. table.tostring(key, cForStr) .. "]" .. " = "
                end
            else--if "userdata" == type(key) then
                szRet = szRet .. cForStr .. "[" .. type(key) .. "]" .. " = "
            end
        end

        local function dealWithValue()
            if "number" == type(value) then
                szRet = szRet .. value .. ",\n"
            elseif "string" == type(value) then
                szRet = szRet .. "\"" .. value .. "\"" .. ",\n"
            elseif "table" == type(value) then
                if value == t then
                    szRet = szRet .. "self" .. ",\n"
                else

                    szRet = szRet .. table.tostring(value, cForStr, {t}) .. ",\n"

                end
            elseif "boolean" == type(value) then
                szRet = szRet .. (value and "true" or "false") .. ",\n"
            else--if "userdata" == type(value) then
                szRet = szRet .. type(value) .. ",\n"
            end
        end
        dealWithKey()
        dealWithValue()
    end
    table.foreach(t, formatPrint)
    szRet = szRet .. oForStr .. "}"

    return szRet
end

猜你喜欢

转载自blog.csdn.net/x2345com/article/details/69661067