lua table输出函数(可以输出嵌套表格)
function PrintTable(o, f, b)
if type(f) ~= "function" and f ~= nil then
error("expected second argument %s is a function", tostring(f))
end
if type(b) ~= "boolean" and b ~= nil then
error("expected third argument %s is a boolean", tostring(b))
end
p = f or io.write
b = b or false
if type(o) == "number" or
type(o) == "function" or
type(o) == "boolean" or
type(o) == "nil" then
p(tostring(o))
elseif type(o) == "string" then
p(string.format("%q",o))
elseif type(o) == "table" then
p("{/n")
for k,v in pairs(o) do
if b then
p("[")
end
PrintTable(k, p, b)
if b then
p("]")
end
p(" = ")
PrintTable(v, p, b)
p(",/n")
end
p("}")
end
end
最近因为工作需要,学习了lua,呵呵,挺有意思了,甚至让我萌生了回去继续学习以前学过一下的python.
因为常用vim编写lua,调试不是太方便,所以根据programming in lua写了上面这个函数,用起来还算方便,当
需要输出到文件的时候就指定第二参数,或者通过io.output改变io.write的行为.第三参数是指定需要输出
到文件并能重新读出来时的[]号的,具体原因就不多讲了,看看programming in lua 就知道了.
下面是个示例:
a = {[{100, 200}] = { 300, 400}, 200, { 300, 500}, abc = "abc"}
PrintTable(a, io.write, true)
输出结果如下:
{
[1] = 200,
[2] = {
[1] = 300,
[2] = 500,
},
[{
[1] = 100,
[2] = 200,
}] = {
[1] = 300,
[2] = 400,
},
["abc"] = "abc",
}
其实还是合法的lua语句,可以用来作为序列化语句,或者配置文件.没有经过严格测试,仅作为抛砖引玉.
对于新手,提示一下,可以通过在此函数前加上module("PrintTable", package.seeall),并将此文件保存在
类似lualibs的库目录,然后就可以通过在你自己的程序中用require "PrintTable"来使用此函数了.
Posted By 九天雁翎 at 九天雁翎的博客 on 2008年08月22日