zoukankan      html  css  js  c++  java
  • chapter 12_2 保存无环的table

      保存table有几种方法,选用哪种方法取决于对table的结构作出了哪些限制性的假设

    第一个方法:

    function serialize(o)
        if type(o) == "number" then
            io.write(o)
        elseif type(o) == "string" then
            io.write(string.format("%q",o))
        else if type(o) == "table then
            io.write("{
    ")           --写table开头
            for k,v in pairs(o) do
                io.write(" ",k," = ")
                serialize(v)          --递归调用serialize
                io.write(",
    ")
            end
            io.write("}
    ")           --写table结尾
        else
            error("cannot serialize a " .. type(o))
        end
    end

    只要table的结构是一个树结构,这种方法还能处理嵌套的table。

    如果一个table的key为数字或者非法的Lua标识符,就会出现问题,一个简单的解决办法是:

    io.write(" ",k," = ")

    改为:

    io.write("  [");serialize(k); io.write("]= ")

    这样,便增强了这个函数的强健性,但是损失了文件的美观性,对于调用:

    serialize{a=12,b="Lua",key='another "one"'}

    第一个版本的输出:

    {
        a = 12,
        b = Lua,
        key = "another "one"",
    }

    而第二个版本:

    {
       [a] = 12,
       [b] = Lua,
       [key] = "another "one"",
    }

    可以测试每种需要方括号的情况,从而改善结果的美观性。

  • 相关阅读:
    第六次作业SSM
    第五次作业——MVC2项目实践
    第四次作业——JSP显示新闻
    第三次作业——servlet应用
    第二次作业——模仿登录页面
    第一次作业——Java web基础
    Alpha项目测试
    作业三
    第二次作业
    第一次阅读作业-201731062609-庞斌
  • 原文地址:https://www.cnblogs.com/daiker/p/5842178.html
Copyright © 2011-2022 走看看