Luaリファレンス 要注意点 ~データ永続~

自己記述データフォーマット

  • 以下のようなデータファイルを"data.txt"として用意しておく。
    Entry
    {
        auther = "Donald E. Knuth",
        title = "Literate Programming",
        publisher = "CSLI",
        year = 1992,
    }
    
    Entry
    {
        auther = "Jon Bentley",
        title = "More Programming Pearls",
        year = 1990,
        publisher = "Addison-Wesley",
    }
    
    
  • Entry{・・・} は Entry({・・・})のLuaと同じフォーマットなので、
    そのままLuaとして実行する読み込む関数を使えば良い。

    以下のように読み込める
    local authors = {}
    function Entry (b) authors[b.auther] = true end
    dofile("data.txt")
    for name in pairs(authors) do print(name) end
    

シリアライズ書き出し関数

  • 以下のようなデータファイルを"data.txt"として用意しておく。
    function serialize (o)
        if type(o) == "number" then
            io.write(o)
        elseif type(o) == "string" then
            io.write(string.format("%q", o))   -- string.format("%q", str)でquoteとなる。適切にシリアライズして書き出しておかないと、読み込みした時にデータが崩壊してしまう。
        else
            <その他の場合>
        end
    end
    
  • シリアライズの決め手はない
    LUAには残念ながらシリアライズの決め手となるものがない。
    このあたりは、複雑なデータ構造でもまんまシリアライズ出来るPythonには、大きく劣ると言える。
    とはいえ、そもそもLUAの使用用途として、LUA自体でシリアライズするということが不自然なのかもしれない。

トップ   差分 履歴 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-01-23 (土) 00:00:00