*Luaで良く作る関数 ~debug編~ [#w225167c] -[[debug.datadumper>#dubug_datadumper]] &aname(dubug_datadumper); **debug.datadumper [#h807f4c2] -様々な変数の中身を''ダンプ''して''文字列として返す''。~ 複雑なテーブルの中身の表示に使うことが多い。~ ~ - debug_datadumper.lua~ #ref(http://lua.tips/download/func/debug/debug_datadumper.lua) #sh(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 #sh(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) --[[ the following 16 lines script: local closures = {} local function closure(t) closures[#closures+1] = t t[1] = assert(loadstring(t[1])) return t[1] end local t = closure { "?LuaQ\000...", 9 } for _,t in pairs(closures) do for i = 2,#t do debug.setupvalue(t[1], i-1, t[i]) end end]] -- 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) --[[ the following 3 lines script: local t = { next=nil } t.next = t return t ]] dump(t3) --[[ the following 14 lines script: local t = setmetatable( { [false]=true, "Hello", { 1, 2 }, { next=nil }, ["function"] = "keyword", key1=10 }, { __index={ next=nil } } ) getmetatable(t).__index.next = getmetatable(t).__index t[3].next = t[3] return t ]] -- Parameters dump(t1, 'a') --> a = setmetatable({ 1 },{ 2 }) dump({}, '') --> { } dump({ { {} } },a,true) --> return {{{},},} }}