当前位置: 首页 > 编程笔记 >

Lua中创建全局变量的小技巧(禁止未预期的全局变量)

黄伟
2023-03-14
本文向大家介绍Lua中创建全局变量的小技巧(禁止未预期的全局变量),包括了Lua中创建全局变量的小技巧(禁止未预期的全局变量)的使用技巧和注意事项,需要的朋友参考一下

Lua 有一个特性就是默认定义的变量都是全局的。为了避免这一点,我们需要在定义变量时使用 local 关键字。

但难免会出现遗忘的情况,这时候出现的一些 bug 是很难查找的。所以我们可以采取一点小技巧,改变创建全局变量的方式。


local __g = _G

-- export global variable cc.exports = {} setmetatable(cc.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 'cc.exports.%s = value' INSTEAD OF SET GLOBAL VARIABLE"         error(string.format(msg, name), 0)     end })

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

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


-- export global

cc.exports.MY_GLOBAL = "hello"

-- use global print(MY_GLOBAL) -- or print(_G.MY_GLOBAL) -- or print(cc.exports.MY_GLOBAL)

-- delete global cc.exports.MY_GLOBAL = nil

-- global function local function test_function_() end cc.exports.test_function = test_function_

-- if you set global variable, get an error INVALID_GLOBAL = "no"

 类似资料:
  • 本文向大家介绍Lua中的全局变量、非全局变量总结,包括了Lua中的全局变量、非全局变量总结的使用技巧和注意事项,需要的朋友参考一下 前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”。这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现;另一个优点是,可以像其他table一样操作这个table。为了便于实施这种操作,L

  • 我得到一个编译错误的代码: 我想让“match”成为一个全局变量。 我的编译错误是: “内部类TestingProgramm中的静态声明非法。匹配修饰符”static“只允许在常量变量声明中使用 在初始化期间使用静态非final变量。“ 我不知道这个错误是什么意思,也不知道如何修复它。

  • 在JavaScript中,我可以这样做: 然后在另一个文件中: 它将定义

  • 问题内容: 我有一个全局变量,需要在我的ViewController之间共享。 在Objective-C中,我可以定义静态变量,但是找不到在Swift中定义全局变量的方法。 您知道这样做的方法吗? 问题答案: 来自官方的Swift编程指南: 全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常数和变量总是延迟计算的。 您可以在任何文件中定义它,也可以在任何位置访问它。因此,您可以在任

  • 当你使用了一个未知的变量名,通常 JavaScript 会自动创建全局变量: function f() { foo = 123 } f() foo 123 好在你会在 ECMAScript5 的严谨模式得到警告[1]: function f() { 'use strict'; foo = 123 } f() ReferenceError: foo is not defined 参考 [1] Jav

  • 本文向大家介绍Lua中全局变量与非全局环境介绍,包括了Lua中全局变量与非全局环境介绍的使用技巧和注意事项,需要的朋友参考一下 今天来聊两个话题——全局变量和非全局环境。 正如大家目前心里所感受到的,全局变量的内容很简单,而非全局环境的内容就稍微要锻炼一下脑细胞了。 1.全局变量的原形 在Lua中,要声明全局变量很简单,那就是定义变量的时候,前面不要加上local。 这个神秘的全局变量,其实本质上