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

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

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

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

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

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

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

    ---
    -- @function: 获取table的字符串格式内容,递归
    -- @tab: table
    -- @ind:不用传此参数,递归用(前缀格式(空格))
    -- @return: format string of the table
    function dumpTab(tab,ind)
      if(tab==nil)then return "nil" end;
      local str="{";
      if(ind==nil)then ind="  "; end;
      --//each of table
      for k,v in pairs(tab) do
        --//key
        if(type(k)=="string")then
          k=tostring(k).." = ";
        else
          k="["..tostring(k).."] = ";
        end;--//end if
        --//value
        local s="";
        if(type(v)=="nil")then
          s="nil";
        elseif(type(v)=="boolean")then
          if(v) then s="true"; else s="false"; end;
        elseif(type(v)=="number")then
          s=v;
        elseif(type(v)=="string")then
          s="""..v..""";
        elseif(type(v)=="table")then
          s=dumpTab(v,ind.."  ");
          s=string.sub(s,1,#s-1);
        elseif(type(v)=="function")then
          s="function : "..v;
        elseif(type(v)=="thread")then
          s="thread : "..tostring(v);
        elseif(type(v)=="userdata")then
          s="userdata : "..tostring(v);
        else
          s="nuknow : "..tostring(v);
        end;--//end if
        --//Contact
        str=str.."
    "..ind..k..s.." ,";
      end --//end for
      --//return the format string
      local sss=string.sub(str,1,#str-1);
      if(#ind>0)then ind=string.sub(ind,1,#ind-2) end;
      sss=sss.."
    "..ind.."}
    ";
      return sss;--string.sub(str,1,#str-1).."
    "..ind.."}
    ";
    end;--//end function
    
    --//网摘,直接打印到屏幕
    function printTable(t, n)
      if "table" ~= type(t) then
        return 0;
      end
      n = n or 0;
      local str_space = "";
      for i = 1, n do
        str_space = str_space.."  ";
      end
      print(str_space.."{");
      for k, v in pairs(t) do
        local str_k_v
        if(type(k)=="string")then
          str_k_v = str_space.."  "..tostring(k).." = ";
        else
          str_k_v = str_space.."  ["..tostring(k).."] = ";
        end
        if "table" == type(v) then
          print(str_k_v);
          printTable(v, n + 1);
        else
          if(type(v)=="string")then
            str_k_v = str_k_v.."""..tostring(v)..""";
          else
            str_k_v = str_k_v..tostring(v);
          end
          print(str_k_v);
        end
      end
      print(str_space.."}");
    end
    
    --//test code
    b={[printTable]=1,[dumpTab]=33}
    a={inter={ext=1000,uuid="432-43243-43124324",inter2={ext=1000,uuid="432-43243-43124324",[printTable]=2},"anil",nil},"fda",fdsaf,true};
    
    local sa=dumpTab(b);
    print(sa);
    
    sa=dumpTab(a);
    print(sa);
    
    printTable(a)
    printTable(b)
    原文链接:https://www.cnblogs.com/lzpong/p/5817598.html

    function print_r ( t )  
        local print_r_cache={}
        local function sub_print_r(t,indent)
            if (print_r_cache[tostring(t)]) then
                print(indent.."*"..tostring(t))
            else
                print_r_cache[tostring(t)]=true
                if (type(t)=="table") then
                    for pos,val in pairs(t) do
                        if (type(val)=="table") then
                            print(indent.."["..pos.."] => "..tostring(t).." {")
                            sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
                            print(indent..string.rep(" ",string.len(pos)+6).."}")
                        elseif (type(val)=="string") then
                            print(indent.."["..pos..'] => "'..val..'"')
                        else
                            print(indent.."["..pos.."] => "..tostring(val))
                        end
                    end
                else
                    print(indent..tostring(t))
                end
            end
        end
        if (type(t)=="table") then
            print(tostring(t).." {")
            sub_print_r(t,"  ")
            print("}")
        else
            sub_print_r(t,"  ")
        end
        print()
    end
    https://www.cnblogs.com/leezj/p/4230271.html
  • 相关阅读:
    jquery ajax参数详解
    压缩解压函数实现
    WCF 大数据量如何从服务端传到客户端
    [DllImport("kernel32.dll")]
    Oracle数据库使用基础和实例
    Js常用的动态效果
    Js使用正则实现表单验证
    Oracle数据库理论知识
    HTML5,CSS3,JavaScript基础知识与使用
    速读《人月神话》
  • 原文地址:https://www.cnblogs.com/7qin/p/13511335.html
Copyright © 2011-2022 走看看