Lua印刷table実装タイプpythonのreprをtableに使用
1717 ワード
luaのインタラクティブな環境では、タイプtableの変数を入力しても、変数の内容が表示されないなんて、ipythonより体験が悪いのはほんの少しではありません.Googleとbingも使いやすい車輪を見つけられず、自分で作った.
Usage::
-- utils.lua
utils = {}
function utils.is_empty(tab)
return not tab or next(tab) == nil
end
function repr(tab,...)
local i, s, is_list, is_nest = 1, '', true, select('#', ...)
local pre, sep = ' ', '
'
if is_nest ~= 0 then
pre, sep = '', ' '
end
for k,v in pairs(tab) do
if i > 5 then
s = s..','..sep..pre..'...'
break
end
if i ~= 1 then
s = s..','
end
s = s..sep..pre
if k ~= i then
is_list = false
s = s..'"'..k..'": '
end
value_type = type(v)
if value_type == 'string' then
v = '"'..v..'"'
elseif value_type == 'table' then
v = repr(v, 1)
end
s = s..v
i = i + 1
end
if is_list then
s = '['..s..sep..']'
else
s = '{'..s..sep..'}'
end
return s
end
utils.repr = repr
return utils
Usage::
$ lua
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> require('utils')
table: 0x7ff4e15009f0
> repr = utils.repr
> a = {1, 2, 3}
> repr(a)
[
1,
2,
3
]
> b = {a=1, b=2, c=3}
> repr(b)
{
"a": 1,
"b": 2,
"c": 3
}
> c = {
{a=1},{b=2},{c=3}}
> repr(c)
[
{ "a": 1 },
{ "b": 2 },
{ "c": 3 }
]
>