九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

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"来使用此函数了.

分类:  Lua 
标签:  Lua 

Posted By 九天雁翎 at 九天雁翎的博客 on 2008年08月22日

前一篇: 读windows核心编程,结构化异常部分,理解摘要 后一篇: linux/windows库准备工作