lua小技巧(二)——lua全局变量的检测

相信用lua的人都遇到过由于拼写错误把局部变量变成全局变量的情况,如何避免这个问题呢?
直接上代码!

    local mt = {
        __index = function(_, key)
            local info = debug.getinfo(2, "S")
            if info and info.what ~= "main" and info.what ~= "C" then
                print("访问不存在的全局变量:" .. key)
            end
            return rawget(_G, key)
        end,
        __newindex = function(_, key, value)
            local info = debug.getinfo(2, "S")
            if info and info.what ~= "main" and info.what ~= "C" then
                print("赋值不存在的全局变量:" .. key)
            end
            return rawset(_G, key, value)
        end
    }
    setmetatable(_G, mt)

先给全局表_G设置metatable,当访问到不存在的全局变量,或者对不存在的全局变量进行赋值时,调用debug.getinfo(2, “S”)获取调用的堆栈,如果不在主函数访问或者赋值新的全局变量,则抛出日志,提示开发者修改。
这就保证了全局变量只能在主函数声明,其它模块无法直接访问或者赋值未声明的全局模块,也就避免了大部分局部模块拼写错误的问题。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值