Lua之Table打印


0x01 背景

很多时候,大家仍习惯print的方式观察变量值,而在Lua里,没有现成的table打印方法

0x02 SHOW ME THE CODE

local function dumpTable(self, depth, as_key)
  depth = depth or 1
  local self_type = type(self)
  if self_type == "table" and depth > 0 then
    local pieces = {}
    local first = true
    for k, v in pairs(self) do
      local key_str = dumpTable(k, depth - 1, true)
      local value_str = dumpTable(v, depth - 1)
      if first then
        table.insert(pieces, key_str .. "=" .. value_str)
        first = false
      else
        table.insert(pieces, ", " .. key_str .. "=" .. value_str)
      end
    end
    if as_key then
      return "[{" .. table.concat(pieces) .. "}]"
    else
      return "{" .. table.concat(pieces) .. "}"
    end
  elseif self_type == "string" then
    if as_key then
      return self
    else
      return '"' .. self .. '"'
    end
  elseif self_type == "userdata" then
    if as_key then
      return "[" .. "[#userdata#]" .. "]"
    else
      return "[#userdata#]"
    end
  else
    if as_key then
      return "[" .. tostring(self) .. "]"
    else
      return tostring(self)
    end
  end
end

-- 使用方法
dumpTable(tb, 1)
dumpTable(tb, 3)

声明:PowerMatz | 版权所有,违者必究 | 如未注明,均为原创 | 本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Lua之Table打印


Stay hungry. Stay foolish.