Lua 完美打印数据 (例子)

本文提供了两种在Lua中打印复杂表格的方法。一种是使用递归函数深入遍历并打印表格内容,另一种则是通过设置最大层级避免无限递归。这两种方法都考虑了打印深度,防止在存在循环引用的情况下出现无限递归的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子1 :

 1 ableprint = function(data,cstring,deepIndex)  --第二个参数可以为空,第三个参数不要手动添加,它是用来进行打印深度控制的。
 2     if data == nil then   
 3         print("core.print data is nil");  
 4     end
 5  
 6     if deepIndex == nil then deepIndex = 1 end
 7     if cstring == nil then cstring = "" end
 8  
 9     local cs = cstring .. " ";  
10     print(cstring .."{");  
11     if(type(data)=="table") then  
12         for k, v in pairs(data) do  
13             if(type(v) == "table") then print(cs..tostring(k).." = ");
14             else print(cs..tostring(k).." = "..tostring(v)); end
15  
16             if(type(v)=="table") then
17  
18                 if (deepIndex + 1) < 5 then  --5就是控制的打印深度(你可以根据需要调整),以防数据结构中存在循环饮用(别以为不可能,我就遇到过)
19                     zr.tableprint(v,cs,(deepIndex+1));
20                 else
21                     print(cs.." {"..tostring(v).."}");
22                 end
23             end  
24         end  
25     else  
26         print(cs..tostring(data));  
27     end  
28     print(cstring .."}");  
29 end

 

例子2:

 1 function var_dump(data, max_level, prefix)   
 2     if type(prefix) ~= "string" then   
 3         prefix = ""  
 4     end   
 5     if type(data) ~= "table" then   
 6         print(prefix .. tostring(data))   
 7     else  
 8         print(data)   
 9         if max_level ~= 0 then   
10             local prefix_next = prefix .. "    "  
11             print(prefix .. "{")   
12             for k,v in pairs(data) do  
13                 io.stdout:write(prefix_next .. k .. " = ")   
14                 if type(v) ~= "table" or (type(max_level) == "number" and max_level <= 1) then   
15                     print(v)   
16                 else  
17                     if max_level == nil then   
18                         var_dump(v, nil, prefix_next)   
19                     else  
20                         var_dump(v, max_level - 1, prefix_next)   
21                     end   
22                 end   
23             end   
24             print(prefix .. "}")   
25         end   
26     end   
27 end  

 

转载于:https://www.cnblogs.com/gggzly/p/5947900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值