- 追加された行はこの色です。
- 削除された行はこの色です。
*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:
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]]
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:
dump(t2)
--[[ the following 3 lines script:
local t = { next=nil }
t.next = t
return t
]]
dump(t3) --[[ the following 14 lines script:
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 {{{},},}
}}