Luaで良く作る関数 ~debug編~

debug.datadumper

  • 様々な変数の中身をダンプして文字列として返す
    複雑なテーブルの中身の表示に使うことが多い。

  • debug_datadumper.lua
    -- value     : 適当な変数。userdata型以外は大抵何らかの表示が可能。
    -- varname   : 戻り値をどのように表示するのか
    --             nil : デフォルト 
    --             変数ぽい文字列を指定(例:"var")      : "var = dump結果" となる。
    --             変数ぽくない文字列を指定(例:"var##") : "var##dump結果" となる。
    -- fastmode  : true or false
    --             nil or false : デフォルト 
    --             true         : いろいろ処理を端折って、高速に処理をする
    -- indent    : 整数 or nil
    --             nil          : デフォルト。0指定と同じ。
    --             整数          : テーブルをダンプする際に、全体を右に寄せる。1当たり半角空白2つ右にずれる。
    --
    function debug.datadumper(value[, varname, fastmode, indent])
    
  • 使い方
    test.lua
    require "debug_datadumper"
    
    -- Define a shortcut function for testing
    function dump(...)
      print(debug.datadumper(...), "\n---")
    end
    
    -- Simple types:
    dump(8)         --> return 8
    dump(true)      --> return true
    dump()          --> return nil
    dump('Hello')   --> return "Hello"
    
    -- Functions:
    f1 = print
    function f2() return "Hello" end
    do
      local val = 9
      function f3() return val end
    end
    dump(f1)        --> return print
    dump(f2)        --> return loadstring("?LuaQ\000...
    dump(f3)
    
    -- Tables:
    dump({})        --> return {  }
    dump({1,2,3})   --> return { 1, 2, 3 }
    dump({a=9,b=2}) --> return { a=9, b=2 }
    t1 = setmetatable({1},{2})
    t2 = {}; t2.next = t2
    t3 = {[false] = true, 'Hello', ["key1"] = 10, ["function"] = "keyword", {1,2} }
    setmetatable(t3, {__index = t2})
    t3[3] = t2
    dump(t1)        --> return setmetatable({ 1 },{ 2 })
    dump(t2)
    
    dump(t3)
    
    -- Parameters
    dump(t1, 'a')   --> a = setmetatable({ 1 },{ 2 })
    dump({}, '')    --> {  }
    dump({ { {} } },a,true) --> return {{{},},}
     
    

prtr-dump

  • dump専用のしっかりしたモジュールを導入するのであれば、
    prtr-dumpなどの選択肢があります。

    こちらもファイルは1つだけで済むので、使い勝手は良いと言えるでしょう。

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