真Unity3d_lua打印管理

昨晚手机进水了,早上心情非常不好,才发现手机可能是比你老婆陪伴你还久的物件,这么说或者很不人道,但如果你是一个把飞向火星作为你的终身事业的人,应该可以理解:“事或物,很多时候甚至比人承载更多的情感“

没心思工作,就来折腾一下代码吧,分享一个lua 打印的实现:

(具体什么功能也和一般打印没什么两样,很普通,就是能打印堆栈)

-- 打印lua堆栈信息
function printCallStack(lev)
    local startLevel = lev or 2 --0表示getinfo本身,1表示调用getinfo的函数(printCallStack),2表示调用printCallStack的函数,可以想象一个getinfo(0级)在顶的栈.
    local maxLevel = 20 --最大递归10层
    local res = ""
    for level = startLevel, maxLevel do
        -- 打印堆栈每一层
        local info = debug.getinfo(level, "nSl")
        if info == nil then break end
        -- 打印该层的参数与局部变量
        local index = 1 --1表示第一个参数或局部变量, 依次类推
        local kv = ""
        while true do
            local name, value = debug.getlocal(level, index)
            if name == nil then break end

            local valueType = type(value)
            local valueStr
            if valueType == 'string' then
                valueStr = value
            elseif valueType == "number" then
                valueStr = string.format("%.3f", value)
            end
            if valueStr ~= nil then
                kv = string.format(" %s%s=%s,", kv, name, value)
            end
            index = index + 1
        end
        local ps = info.source and string.split(info.source,"/") or nil
        res = res .. "\n" .. string.format("%-20s%s_%d\t\t%s", ps and ps[#ps] or "", info.name or "" , info.currentline, kv)
    end
    return res
end

 

当然上面代码并没有完全和Unity或游戏日志系统整合,但是这是既可以获取堆栈信息,又有层级结构和递归(代码有些绕),之后是铁定能整合,这么一个代码,谁不爱

Debug.Log(printCallStack())

再再分享一个,获取可变参数的处理方法

    local par_len = select("#",...)
    local par_one = select(1,...)
    local ss = {}
    for i = 1, len do ss[i] = tostring(select(i, ...))end
    local str = table.concat(ss, ",")

当然,不确定select语法是不是新语法,感觉好像目测我的项目lua 5.1 能用

当以上lua灵活运用时,也没有怎么样,还是可以继续搬砖

====================================================================

遇到过只想写lua,不想写c#的人,但他写了2年 lua, 还只会if else,不知道他为何热爱

也遇到过只想写C#,觉得lua是脚本的人,大量把C#的Enum,往lua代码里面套用,代码是能通过的,无措便是优,但更不知道他为何热爱

你是无论如何唤不醒一个装睡的人

你也是无论如何不能把一个人从他的舒适区把他赶出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值