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