美文网首页
Lua中创建全局变量的小技巧

Lua中创建全局变量的小技巧

作者: _ArayA_ | 来源:发表于2019-12-11 16:08 被阅读0次

    Lua 有一个非常灵活的特性就是默认定义的变量都是全局变量.
    但是由于太灵活了,我们一般在定义变量时会使用 local 关键字.
    但是实际操作中,特别是多人开发时,很容易忘记.
    如果恰巧是同名变量的话,出现bug 是很难发现的.
    下面我们提个小技巧,改变创建全局变量的方式.

    local __g = _G
    
    -- export global variable
    Globe.exports = {}
    setmetatable(Globe.exports, {
        __newindex = function(_, name, value)
            rawset(__g, name, value)
        end,
    
        __index = function(_, name)
            return rawget(__g, name)
        end
    })
    
    -- disable create unexpected global variable
    setmetatable(__g, {
        __newindex = function(_, name, value)
            local msg = "USE 'Globe.exports.%s = value' INSTEAD OF SET GLOBAL VARIABLE"
            error(string.format(msg, name), 0)
        end
    })
    

    增加上面的代码后,我们要再定义全局变量就会的得到一个错误信息。

    但有时候全局变量是必须的,例如一些全局函数。
    我们可以使用新的定义方式:

    -- export global
    Globe.exports.MY_GLOBAL = "hello"
    
    -- use global
    print(MY_GLOBAL)
    -- or
    print(_G.MY_GLOBAL)
    -- or
    print(Globe.exports.MY_GLOBAL)
    
    -- delete global
    Globe.exports.MY_GLOBAL = nil
    
    -- global function
    local function test_function_()
    end
    Globe.exports.test_function = test_function_
    
    -- if you set global variable, get an error
    INVALID_GLOBAL = "no"
    

    相关文章

      网友评论

          本文标题:Lua中创建全局变量的小技巧

          本文链接:https://www.haomeiwen.com/subject/jezogctx.html