pprint

另一个 Lua 格式化打印工具

$ opm get DevonStrawn/pprint

pprint.lua

简单的 Lua 格式化打印,可自定义且属于公有领域!

[!构建状态](https://travis-ci.org/jagt/pprint.lua)

pprint.lua 是 [inspect.lua][1] 的友好重新实现。pprint(whatever) 其中 whatever 是你在 Lua 中可以找到的任何东西。它会将其转储为有意义的表示形式。值得注意的功能包括

  • 通过设置选项进行有限的自定义。

  • 合理的默认值,例如打印函数、用户数据、换行长行等。

  • 打印结果可以被 eval(不能保证与原始值完全相同)。

  • 在 Lua 5.1、5.2、5.3 和 Luajit 2.0.2 上测试。

  • 发布到公有领域,无论出于何种原因。

示例

    local pprint = require('pprint')
    pprint(_G)
    -- dumped _G to standard output:
    -- { --[[table 1]]
    --   _G = [[table 1]],
    --   _VERSION = 'Lua 5.1',
    --   arg = {},
    --   coroutine = { --[[table 11]] },
    --   debug = { --[[table 6]] },
    --   io = { --[[table 7]] },
    --   math = { --[[table 10]]
    --     huge = 1.#INF,
    --     pi = 3.1415926535898
    --   },
    --   os = { --[[table 8]] },
    --   package = { --[[table 3]]
    --   ...

用法

获取 `pprint.lua` 并将其放入你的项目中。然后只需 require 并开始打印

    local pprint = require('pprint')
    pprint({ foo = 'bar' })

如果你使用 LuaRocks,则只需获取 [inspect.lua][1] 即可。它存在的时间更长,并且更稳定。

pprint.lua 公开了包含另外两个函数的 pprint

  • pprint(...):漂亮地打印参数,每个参数从新行开始。

  • pprint.pformat(obj[, option[, printer]]):返回 obj 的字符串表示形式。提供 option 以覆盖此调用期间的全局设置。printer 将会重复调用,输出字符串片段。例如 pprint 使用 io.write 作为打印机。

  • pprint.setup(option):设置全局选项,影响所有后续调用。

  • pprint.defaults:默认设置。pprint(pprint.defaults) 以查看其中包含的内容。

选项

你可以使用 pprint.setup 配置 pprint 的行为,或者将一个表传递给 pformat

    pprint.setup {
        show_all = true,
        wrap_array = true,
    }
    print(pprint.format(pprint.defaults, {sort_keys = false}))

可用的选项包括

  • show_{type}:当设置为 false 时,跳过给定 type 的值。这包括作为键、值或表数组元素的值的类型。默认为仅显示 nilbooleannumberstring。在某些项目中,type() 可能会返回非标准类型。pprint.lua 将所有这些视为 table,在大多数情况下应该是合理的。

  • show_metatable:是否显示元表。默认为 false

  • show_all:当设置为 true 时,显示所有内容。它会覆盖所有其他 show 选项。默认为 false

  • use_tostring:当可用时,使用 __tostring 显示表。默认为 false

  • filter_function:提供一个函数,它将被调用为 func(v, [k, t])v 是值。k 是键或索引,而 t 是父级,它并不总是可用。返回真值以跳过显示此值。以下是如何隐藏空表的示例

    `lua pprint.setup{filter_function = function(v, k) return type(v) == 'table' and not next(v) end} `

  • object_cache:表可能包含循环引用,简单地打印所有值会导致无限循环。object_cache 默认为 local,因此 pprint 会使用短名称引用之前看到的表。设置为 global 将导致缓存在 pprint 调用之间保持。设置为 false 以禁用,这可能会导致无限循环。

    `lua empty = {} d = {a=empty, b=empty, c=empty} pprint(d) -- { -- a = { --[[table 2]] }, -- b = [[table 2]], -- c = [[table 2]] -- } `

  • indent_size:每个嵌套表的缩进大小。默认为 2

  • level_width:每个缩进级别的最大宽度。默认为 80

  • wrap_string:换行长度超过 level_width 的字符串。默认为 true

    `lua pprint.setup({level_width = 12, wrap_string = true}) pprint('these are my twisted words.') -- [[these are -- my twisted w -- ords.]] `

  • wrap_array:是否在新行上打印每个数组元素。默认为 false

  • sort_keys:自然排序表键以方便阅读。默认为 true

错误

目前 pprint.lua 应该可用,这意味着没有明显的问题。如果你发现某些内容错误,请务必打开一个 issue。

  1. 还没有足够的测试。

  2. 某些设置的组合可能会导致输出中的视觉伪像。

  3. eval pformat 结果可能并不总是有效,因为字符串转义目前并不完美。

待办事项

  • 详细名称标签打印,ie --[[table io]]

  • show_custom 类型,option.show_foo = function(v) ... end

许可证

公有领域

[1]:https://github.com/kikito/inspect.lua "inspect.lua"

作者

陈涛 (@jagt)

许可证

公共

版本