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的值。这包括作为键、值或表数组元素的值的类型。默认为仅显示nil、boolean、number、string。在某些项目中,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。
还没有足够的测试。
某些设置的组合可能会导致输出中的视觉伪像。
eval
pformat结果可能并不总是有效,因为字符串转义目前并不完美。
待办事项
详细名称标签打印,
ie --[[table io]]show_custom 类型,
option.show_foo = function(v) ... end
许可证
公有领域
[1]:https://github.com/kikito/inspect.lua "inspect.lua"
作者
陈涛 (@jagt)
许可证
公共
版本
-
另一个 Lua 格式化打印工具 2020-01-28 00:19:33