目录
打印 table函数:
function print_r ( t )
local print_r_cache={}
local function sub_print_r(t,indent)
if (print_r_cache[tostring(t)]) then
print(indent.."*"..tostring(t))
else
print_r_cache[tostring(t)]=true
if (type(t)=="table") then
for pos,val in pairs(t) do
if (type(val)=="table") then
print(indent.."["..pos.."] => "..tostring(t).." {")
sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
print(indent..string.rep(" ",string.len(pos)+6).."}")
elseif (type(val)=="string") then
print(indent.."["..pos..'] => "'..val..'"')
else
print(indent.."["..pos.."] => "..tostring(val))
end
end
else
print(indent..tostring(t))
end
end
end
if (type(t)=="table") then
print(tostring(t).." {")
sub_print_r(t," ")
print("}")
else
sub_print_r(t," ")
end
print()
end
测试:
tb1 = {
k1 = "v1",
k2 = "v2",
k3 = {"1", "2", "3"}
}
print_r(tb1)
结果:
ngx.say table 函数:
function tb_say ( t )
local print_r_cache={}
local function sub_print_r(t,indent)
if (print_r_cache[tostring(t)]) then
ngx.say(indent.."*"..tostring(t))
else
print_r_cache[tostring(t)]=true
if (type(t)=="table") then
for pos,val in pairs(t) do
if (type(val)=="table") then
ngx.say(indent.."["..pos.."] => "..tostring(t).." {")
sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
ngx.say(indent..string.rep(" ",string.len(pos)+6).."}")
elseif (type(val)=="string") then
ngx.say(indent.."["..pos..'] => "'..val..'"')
else
ngx.say(indent.."["..pos.."] => "..tostring(val))
end
end
else
ngx.say(indent..tostring(t))
end
end
end
if (type(t)=="table") then
ngx.say(tostring(t).." {")
sub_print_r(t," ")
ngx.say("}")
else
sub_print_r(t," ")
end
ngx.say()
end
OK.