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"",
    }

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

  • 相关阅读:
    day16作业 后台管理
    华为园区网实验
    静态路由与思科的区别
    JUnit 两日游
    SQL语句学习积累·数据的操作
    僵固式思维 OR 成长式思维
    压测噩梦后的小感想
    跌跌撞撞的三年
    Linux命令累积
    LoadRunner 学习(基础一)
  • 原文地址:https://www.cnblogs.com/daiker/p/5842178.html
Copyright © 2011-2022 走看看