树型打印一个 table
php 中有个 print_r
函数,可以递归打印一张表。很多 php 程序员喜欢用这个去调试程序。
我想,所有写过一定代码量的 lua 程序员都会写一个类似的东西放着备用吧。这两天调试 lua 程序的时候,发现以前做的简陋的 print_r
不够好用。对于复杂的 table 打印出来一大篇很不直观。结果就放下手头的工作,花了整整一个小时,写了下面几十行代码。把 table 输出成树结构。
比如:
a = {} a.a = { hello = { alpha = 1 , beta = 2, }, world = { foo = "ooxx", bar = "haha", root = a, }, } a.b = { test = a.a } a.c = a.a.hello print_r(a)
可以输出成:
+a+hello+alpha [1] | | +beta [2] | +world+root {.} | +bar [haha] | +foo [ooxx] +c {.a.hello} +b+test {.a}
代码参考这里:
其实实现的细节需要注意的就两个地方:一个是考虑循环引用的问题。(一般用 table 模拟树结构都会记录一个 parent 节点的引用,这样就造成了循环引用)
一个是表格线的处理,对最后一个子节点需要特殊处理。
这段代码的输出风格不算美观,至少不如那些显示文件目录结构的命令行工具。不过我觉得是够用就成,另外需要尽量紧凑,不浪费空间。需要更美观的同学,其实也可以很容易的对其改进。
Comments
Posted by: jason | (9) January 27, 2014 06:17 PM
Posted by: katy | (8) October 29, 2012 03:18 PM
Posted by: alacner | (7) June 10, 2009 03:59 PM
Posted by: 辰玉 | (6) May 4, 2009 09:14 PM
Posted by: sunway | (5) May 4, 2009 09:19 AM
Posted by: holight | (4) May 3, 2009 09:53 PM
Posted by: mm | (3) May 3, 2009 04:50 PM
Posted by: xLight | (2) May 3, 2009 04:02 PM
Posted by: sky618 | (1) May 3, 2009 04:02 PM