zoukankan      html  css  js  c++  java
  • 打印Lua的Table对象

    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈

    不过今天刚完成了这个东西,

    以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~

      打印的效果,自己感觉还比较慢,不敢私藏,赶紧分享...

      如有更好的更改,欢迎讨论,优化!!!

    以下脚本保存到文件"dumpTable.lua" 之后要使用 直接加载就行了:

     1 ---
     2 -- @function: 获取table的字符串格式内容,递归
     3 -- @tab: table
     4 -- @ind:不用传此参数,递归用(前缀格式(空格))
     5 -- @return: format string of the table
     6 function dumpTab(tab,ind)
     7   if(tab==nil)then return "nil" end;
     8   local str="{";
     9   if(ind==nil)then ind="  "; end;
    10   --//each of table
    11   for k,v in pairs(tab) do
    12     --//key
    13     if(type(k)=="string")then
    14       k=tostring(k).." = ";
    15     else
    16       k="["..tostring(k).."] = ";
    17     end;--//end if
    18     --//value
    19     local s="";
    20     if(type(v)=="nil")then
    21       s="nil";
    22     elseif(type(v)=="boolean")then
    23       if(v) then s="true"; else s="false"; end;
    24     elseif(type(v)=="number")then
    25       s=v;
    26     elseif(type(v)=="string")then
    27       s="""..v..""";
    28     elseif(type(v)=="table")then
    29       s=dumpTab(v,ind.."  ");
    30       s=string.sub(s,1,#s-1);
    31     elseif(type(v)=="function")then
    32       s="function : "..v;
    33     elseif(type(v)=="thread")then
    34       s="thread : "..tostring(v);
    35     elseif(type(v)=="userdata")then
    36       s="userdata : "..tostring(v);
    37     else
    38       s="nuknow : "..tostring(v);
    39     end;--//end if
    40     --//Contact
    41     str=str.."
    "..ind..k..s.." ,";
    42   end --//end for
    43   --//return the format string
    44   local sss=string.sub(str,1,#str-1);
    45   if(#ind>0)then ind=string.sub(ind,1,#ind-2) end;
    46   sss=sss.."
    "..ind.."}
    ";
    47   return sss;--string.sub(str,1,#str-1).."
    "..ind.."}
    ";
    48 end;--//end function
    49 
    50 --//网摘,直接打印到屏幕
    51 function printTable(t, n)
    52   if "table" ~= type(t) then
    53     return 0;
    54   end
    55   n = n or 0;
    56   local str_space = "";
    57   for i = 1, n do
    58     str_space = str_space.."  ";
    59   end
    60   print(str_space.."{");
    61   for k, v in pairs(t) do
    62     local str_k_v
    63     if(type(k)=="string")then
    64       str_k_v = str_space.."  "..tostring(k).." = ";
    65     else
    66       str_k_v = str_space.."  ["..tostring(k).."] = ";
    67     end
    68     if "table" == type(v) then
    69       print(str_k_v);
    70       printTable(v, n + 1);
    71     else
    72       if(type(v)=="string")then
    73         str_k_v = str_k_v.."""..tostring(v)..""";
    74       else
    75         str_k_v = str_k_v..tostring(v);
    76       end
    77       print(str_k_v);
    78     end
    79   end
    80   print(str_space.."}");
    81 end
    82 
    83 --//test code
    84 b={[printTable]=1,[dumpTab]=33}
    85 a={inter={ext=1000,uuid="432-43243-43124324",inter2={ext=1000,uuid="432-43243-43124324",[printTable]=2},"anil",nil},"fda",fdsaf,true};
    86 
    87 local sa=dumpTab(b);
    88 print(sa);
    89 
    90 sa=dumpTab(a);
    91 print(sa);
    92 
    93 printTable(a)
    94 printTable(b)

     测试打印结果如下:

    感觉还不错吧,  各个类型的 分类显示了(boolean,number,string,table...),, 嘿嘿!~

      关于 Lua 的编译调试工具,可以搜搜 LuaEditer, LuaStudio , 蛮不错的

    PS:LuaEditer v6.3 (我在用的) ,  LuaStudio 还没试过.

    其他IDE:http://lua-users.org/wiki/DebuggingLuaCode

  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/lzpong/p/5817598.html
Copyright © 2011-2022 走看看