• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua中创建全局变量的小技巧(禁止未预期的全局变量)

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

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua定义全局变量,lua 全局变量,lua 全局函数,lua 变量,lua环境变量等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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
})
</div>

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

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

-- 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"
</div>

</div>

您可能想查找下面的文章:

  • 解析Lua中的全局环境、包、模块组织结构
  • Lua教程(十一):模块与包详解
  • Lua中创建全局变量的小技巧(禁止未预期的全局变量)
  • Lua极简入门指南:全局变量
  • Lua中全局变量与非全局环境介绍

相关文章

  • Lua select函数用法实例
  • Lua中的源代码预编译浅析
  • Lua中的metatable介绍
  • Lua中break语句的使用方法详解
  • 把Lua函数传递到C/C++中实例
  • Lua教程(九):元表与元方法详解
  • Lua中数字for循环实例
  • Lua中释放table占用内存的方法
  • 安装Nginx+Lua开发环境
  • Lua的编译、执行和调试技术介绍

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua面向对象编程学习笔记
    • openresty中使用lua-nginx创建socket实例
    • Lua调用自定义C模块
    • lua实现的2048小游戏
    • Lua的迭代器使用中应该避免的问题和技巧
    • Lua 操作 MongoDB 数据库实例
    • vs2012 error c4996: This function or variable may be unsafe
    • 浅谈chuck-lua中的多线程
    • Lua cjson模块编译笔记及错误解决方法
    • Lua面向对象之类和继承

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有