Lua 打印table 实现类型python的repr用于table

lua的交互环境里,输入类型为table的变量,竟然不显示变量的内容,比起ipython来,体验差的不是一星半点。google和bing也没搜到好用的轮子,于是自己造了一个

-- 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 = '    ', '\n'
    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 }
]
>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值