rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » Lua

lua打印table内容

table作为lua唯一的数据结构,在调试时我们时常需要查看某变量的值,此时希望将此值打印出来,下面以打印全局变量_G为例说明打印table需要注意的事项:

1. table中某键值含有自循环,如a={1,2}, a[3]=a这样的形式,尤其lua的全局变量_G中含有键(域)_G,这说明如果处理不好这种情况,会出现死循环情况,如a[3]={1,2,{1,2},...},此时需要存储已读取的键值信息,再以后的读取键值过程中,如果出现同样的值,则以以往出现过的键名来代替,如a[3]=a

2.输出信息尽可能的清晰,变量之间关系要层次话。

为此编写了函数echo,用于对table的显示输出。

function echo(t,n,saved)
saved = saved or {}
n = n or 0
for k in pairs(t) do
   local str = ''
   if n~=0 then
    local fmt = '%' .. 2*n .. 's'
    str = string.format(fmt, '')
   end
   io.write(str,tostring(k), ' = ')
   if type(t[k])=='table' then
    local m = n
    m = m+1
    if saved[t[k]] then
     io.write(saved[t[k]], '\n')
    else
     saved[t[k]] = k
     io.write('{\n')
     echo(t[k], m, saved)
     io.write(str,'}\n')
    end
   else
    io.write(tostring(t[k]),'\n')
   end
end
end

测试echo(_G)如下:

string = {
sub = function: 003E8038
upper = function: 003E8078
len = function: 003E7EF8
gfind = function: 003E7E78
rep = function: 003E7FB8
find = function: 003E7DB8
match = function: 003E7F78
char = function: 003E7D38
dump = function: 003E7D78
gmatch = function: 003E7E78
reverse = function: 003E7FF8
byte = function: 003E7CF8
format = function: 003E7DF8
gsub = function: 003E7EB8
lower = function: 003E7F38 xpcall = function: 003E5368
package = {
preload = { loadlib = function: 003E5888
loaded = {
    string = string
    debug = {
      getupvalue = function: 003E92C8
      debug = function: 003E9158
      sethook = function: 003E9330
      getmetatable = function: 003E92A8
      gethook = function: 003E9198
      setmetatable = function: 003E93B8
      setlocal = function: 003E9370
      traceback = function: 003E9420
      setfenv = function: 003E9310
      getinfo = function: 003E91D8
      setupvalue = function: 003E93D8
      getlocal = function: 003E9218
      getregistry = function: 003E9260
      getfenv = function: 003E9178     package = package
    _G = {
      string = string
      xpcall = function: 003E5368
      package = package
      tostring = function: 003E52A0
      print = function: 003E4C80
      loadlib = function: 003E5888
      os = {
        exit = function: 003E7AE8
        setlocale = function: 003E7BC8
        date = function: 003E7618
        getenv = function: 003E7B28
        difftime = function: 003E7658
        remove = function: 003E7B68
        time = function: 003E7C10
        clock = function: 003E75D8
        tmpname = function: 003E7C50
        rename = function: 003E7B88
        execute = function: 003E7AA8       unpack = function: 003E5328
      require = function: 003E4D88
      getfenv = function: 003E48A0
      setmetatable = function: 003E5210
      next = function: 003E4C00
      assert = function: 003E4650
      tonumber = function: 003E5258
      io = {
        lines = function: 003E7008
        write = function: 003E7168
        close = function: 003E6F80
        flush = function: 003E6FA0
        open = function: 003E7028
        output = function: 003E7068
        type = function: 003E7148
        read = function: 003E70E8
        stderr = file (77C2FCC0)
        stdin = file (77C2FC80)
        input = function: 003E6FC0
        stdout = file (77C2FCA0)
        popen = function: 003E70A8
        tmpfile = function: 003E7108       rawequal = function: 003E4CC0
      collectgarbage = function: 003E4690
      getmetatable = function: 003E48E0
      module = function: 003E5D30
      rawset = function: 003E4D48
      echo = function: 003EE168
      tout = function: 003EE148
      math = {
        log = function: 003E8938
        max = function: 003E8978
        acos = function: 003E85B8
        huge = 1.#INF
        ldexp = function: 003E88B8
        pi = 3.1415926535898
        cos = function: 003E8738
        tanh = function: 003E8C00
        pow = function: 003E8A38
        deg = function: 003E8778
        tan = function: 003E8C40
        cosh = function: 003E86F8
        sinh = function: 003E8B40
        random = function: 003E8AB8
        randomseed = function: 003E8AF8
        frexp = function: 003E8878
        ceil = function: 003E86B8
        floor = function: 003E87F8
        rad = function: 003E8A78
        abs = function: 003E8578
        sqrt = function: 003E8BC0
        modf = function: 003E89F8
        asin = function: 003E85F8
        min = function: 003E89B8
        mod = function: 003E8838
        fmod = function: 003E8838
        log10 = function: 003E88F8
        atan2 = function: 003E8638
        exp = function: 003E87B8
        sin = function: 003E8B80
        atan = function: 003E8678       debug = debug
      pcall = function: 003E4C40
      table = {
        setn = function: 003E65F8
        insert = function: 003E6578
        getn = function: 003E5100
        foreachi = function: 003E50B8
        maxn = function: 003E5140
        foreach = function: 003E5078
        concat = function: 003E5038
        sort = function: 003E6638
        remove = function: 003E65B8       _VERSION = Lua 5.1
      type = function: 003E52E8
      newproxy = function: 003E5540
      coroutine = {
        resume = function: 003E5628
        yield = function: 003E5728
        status = function: 003E56A8
        wrap = function: 003E56E8
        create = function: 003E55E8
        running = function: 003E5668       select = function: 003E5190
      _G = _G
      gcinfo = function: 003E4860
      rawget = function: 003E4D08
      loadstring = function: 003E4BB8
      pairs = function: 003E5480
      ipairs = function: 003E5410
      dofile = function: 003E46D8
      setfenv = function: 003E51D0
      load = function: 003E4B78
      error = function: 003E4718
      loadfile = function: 003E4928     io = io
    os = os
    table = table
    math = math
    coroutine = coroutine loaders = {
    1 = function: 003E59B8
    2 = function: 003E59D8
    4 = function: 003E5A18
    3 = function: 003E59F8 cpath = .\?.dll;E:\lua-5.1.4\?.dll;E:\lua-5.1.4\loadall.dll
config = \ ? -
path = .\?.lua;E:\lua-5.1.4\lua\?.lua;E:\lua-5.1.4\lua\?\init.lua;E:\lua-
\?.lua;E:\lua-5.1.4\?\init.lua
seeall = function: 003E58C8 tostring = function: 003E52A0
print = function: 003E4C80
loadlib = function: 003E5888
os = os
unpack = function: 003E5328
require = function: 003E4D88
getfenv = function: 003E48A0
setmetatable = function: 003E5210
next = function: 003E4C00
assert = function: 003E4650
tonumber = function: 003E5258
io = io
rawequal = function: 003E4CC0
collectgarbage = function: 003E4690
getmetatable = function: 003E48E0
module = function: 003E5D30
rawset = function: 003E4D48
echo = function: 003EE168
tout = function: 003EE148
math = math
debug = debug
pcall = function: 003E4C40
table = table
_VERSION = Lua 5.1
type = function: 003E52E8
newproxy = function: 003E5540
coroutine = coroutine
select = function: 003E5190
_G = _G
gcinfo = function: 003E4860
rawget = function: 003E4D08
loadstring = function: 003E4BB8
pairs = function: 003E5480
ipairs = function: 003E5410
dofile = function: 003E46D8
setfenv = function: 003E51D0
load = function: 003E4B78
error = function: 003E4718
loadfile = function: 003E4928

顶一下
(0)
踩一下
(0)