【ulua入門】log(列印)lua中的table資料
阿新 • • 發佈:2019-01-28
先上程式碼:
local function dump_value_(v) if type(v) == "string" then v = "\"" .. v .. "\"" end return tostring(v) end -- 主要用於顯示錶格, 表格,標識,顯示錶格的深度,預設3級 function PrintTable(value, desciption, nesting, show_meta) if type(nesting) ~= "number" then nesting = 3 end show_meta = show_meta or false local lookupTable = {} local result = {} local traceback = string.split(debug.traceback("", 2), "\n") --print("dump from: " .. string.trim(traceback[3])) local function dump_(value, desciption, indent, nest, keylen) desciption =" <color=#FF00FF> ".. desciption.."</color>" or "<color=#bb5555> <table> </color>" local spc = "" if type(keylen) == "number" then spc = string.rep(" ", keylen - string.len(dump_value_(desciption))) end if type(value) ~= "table" then result[#result +1 ] = string.format("%s%s%s = %s", indent, dump_value_(desciption), spc, dump_value_(value)) elseif lookupTable[tostring(value)] then result[#result +1 ] = string.format("%s%s%s = *REF*", indent, dump_value_(desciption), spc) else lookupTable[tostring(value)] = true if nest > nesting then result[#result +1 ] = string.format("%s%s = *MAX NESTING*", indent, dump_value_(desciption)) else result[#result +1 ] = string.format("%s%s = {", indent, dump_value_(desciption)) local indent2 = indent.." " local keys = {} local keylen = 0 local values = {} for k, v in pairs(value) do keys[#keys + 1] = k local vk = dump_value_(k) local vkl = string.len(vk) if vkl > keylen then keylen = vkl end values[k] = v end table.sort(keys, function(a, b) if type(a) == "number" and type(b) == "number" then return a < b else return tostring(a) < tostring(b) end end) for i, k in ipairs(keys) do dump_(values[k], k, indent2, nest + 1, keylen) end result[#result +1] = string.format("%s}", indent) end end end dump_(value, desciption, "\n", 1) local outStr=""; for i, line in ipairs(result) do outStr = outStr..line end log(outStr) return outStr end
測試程式碼:
local testTable = {}
for i=1,10 do
testTable[i] = i * 10 + 5
end
--第一個引數傳入table,第二個引數為這個table的別名
PrintTable(testTable, "TestTableValue")
輸出效果圖: