我在显示包含嵌套表(n深)的表的内容时遇到问题。我想通过一条print
语句或一些快速而肮脏的东西将它直接转储到std out或控制台,但我不知道怎么做。我正在寻找使用gdb打印NSDictionary
时得到的粗略等价物。
发布于 2012-02-07 06:30:56
请随意浏览Lua Wiki on table serialization。它列出了如何将表转储到控制台的几种方法。
你只需要选择哪一个最适合你。有很多方法可以做到这一点,但我最终通常还是使用Penlight中的一种
> t = { a = { b = { c = "Hello world!", 1 }, 2, d = { 3 } } }
> require 'pl.pretty'.dump(t)
{
a = {
d = {
3
},
b = {
c = "Hello world!",
1
},
2
}
}
发布于 2012-02-07 16:58:53
我知道这个问题已经被标记为已回答,但让我在这里插入我自己的库。它叫做inspect.lua,你可以在这里找到它:
https://github.com/kikito/inspect.lua
它只是一个单独的文件,您可以从任何其他文件中请求它。它返回一个函数,将任何Lua值转换为人类可读的字符串:
local inspect = require('inspect')
print(inspect({1,2,3})) -- {1, 2, 3}
print(inspect({a=1,b=2})
-- {
-- a = 1
-- b = 2
-- }
它正确地缩进子表,并正确地处理“递归表”(包含对自身的引用的表),因此它不会进入无限循环。它以一种合理的方式对值进行排序。它还打印元信息。
致以问候!
发布于 2014-03-18 00:36:37
找到了这个:
-- Print contents of `tbl`, with indentation.
-- `indent` sets the initial level of indentation.
function tprint (tbl, indent)
if not indent then indent = 0 end
for k, v in pairs(tbl) do
formatting = string.rep(" ", indent) .. k .. ": "
if type(v) == "table" then
print(formatting)
tprint(v, indent+1)
elseif type(v) == 'boolean' then
print(formatting .. tostring(v))
else
print(formatting .. v)
end
end
end
从这里开始https://gist.github.com/ripter/4270799
对我来说效果很好。
https://stackoverflow.com/questions/9168058
复制相似问题