首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将表转储到控制台?

如何将表转储到控制台?
EN

Stack Overflow用户
提问于 2012-02-07 06:09:17
回答 12查看 210.7K关注 0票数 139

我在显示包含嵌套表(n深)的表的内容时遇到问题。我想通过一条print语句或一些快速而肮脏的东西将它直接转储到std out或控制台,但我不知道怎么做。我正在寻找使用gdb打印NSDictionary时得到的粗略等价物。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2012-02-07 06:30:56

请随意浏览Lua Wiki on table serialization。它列出了如何将表转储到控制台的几种方法。

你只需要选择哪一个最适合你。有很多方法可以做到这一点,但我最终通常还是使用Penlight中的一种

代码语言:javascript
复制
> t = { a = { b = { c = "Hello world!", 1 }, 2, d = { 3 } } }
> require 'pl.pretty'.dump(t)
{
  a = {
    d = {
      3
    },
    b = {
      c = "Hello world!",
      1
    },
    2
  }
}
票数 68
EN

Stack Overflow用户

发布于 2012-02-07 16:58:53

我知道这个问题已经被标记为已回答,但让我在这里插入我自己的库。它叫做inspect.lua,你可以在这里找到它:

https://github.com/kikito/inspect.lua

它只是一个单独的文件,您可以从任何其他文件中请求它。它返回一个函数,将任何Lua值转换为人类可读的字符串:

代码语言:javascript
复制
local inspect = require('inspect')

print(inspect({1,2,3})) -- {1, 2, 3}
print(inspect({a=1,b=2})
-- {
--   a = 1
--   b = 2
-- }

它正确地缩进子表,并正确地处理“递归表”(包含对自身的引用的表),因此它不会进入无限循环。它以一种合理的方式对值进行排序。它还打印元信息。

致以问候!

票数 125
EN

Stack Overflow用户

发布于 2014-03-18 00:36:37

找到了这个:

代码语言:javascript
复制
-- 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

对我来说效果很好。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9168058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档