这个星期一直在研究lua,前段时间刚解决了一个问题,就是module对全局变量的影响,因为对lua还没有系统深入的了解,这个问题折腾了我大半天的时间,大致情况就是 我在主文件中其中一个模块文件声明了一个AAA全局变量,然后模块文件中修改这个AAA变量,并且还增加了一个变量BBB,然后在执行这个模块文件后,再次显示AAA和BBB的值,发现BBB的值时nil,废话不多说来,上代码吧
main.lua
require "a" print("*********************".."*****************") -- 练习一下..的用法 print(AAA[1]) print(AAA[2]) print(BBB[1]) print(BBB[2]) print("**************************************") b= require "b" b.run() print(AAA[1]) print(AAA[2]) print(BBB[1]) print(BBB[2]) print("**************************************")
a.lua文件
AAA = {} AAA[1] = 10 BBB = {}
module(..., package.seeall) function run() print("**************************************") AAA[2] = 20 print(AAA[1]) print(AAA[2]) BBB= AAA print(BBB[1]) print(BBB[2]) print("**************************************") return 0 end
运行 lua main.lua 后,结果如下
************************************** 10 nil nil nil ************************************** ************************************** 10 20 10 20 ************************************** 10 20 nil nil **************************************
大家看到结果了吧,具体原理还不是很清楚,后续补充吧
相关推荐
此外,`init_by_lua*`系列指令在Nginx工作进程启动时执行,常用于全局变量的初始化和配置。`init_worker_by_lua*`则在每个工作进程启动时运行,适合做进程级的初始化操作,确保每个工作进程都有独立的初始化环境。 ...
全局环境是指一个没有名称的预设全局变量表,是全局变量的实际载体。 3. 错误处理 Lua支持异常处理机制,它允许程序描述错误和执行清理代码,典型的错误处理结构包括error函数和pcall(受保护调用)。 4. 元表及元...
Lua中的全局变量实际上是在当前环境表中的键值对,每个函数都有自己的环境,可以访问上一级环境的变量。 8. **协程(Coroutines)**: Lua支持轻量级的并发机制——协程,它们比线程更轻便,可以在单线程中实现...
首先,Lua中的全局环境是一个存储全局变量的表(table),其引用保存在_G这个全局变量中。这使得我们可以使用_G来动态访问和修改全局变量。但是需要注意的是,任何对_G的修改都会影响程序的所有部分,因为它是全局的...
例如,热重载不能改变全局变量的值,因为它们在脚本加载时就已经确定。此外,如果模块之间有复杂的依赖关系,简单的 require 可能无法处理,可能需要更复杂的重载策略。 综上所述,Lua 热重载机制通过监测文件变化...
全局变量实质上是在 `_G` 表中的键值对,因此,`_G['variable']` 等同于 `variable`。 VIII. 错误处理 Lua 使用 `error` 函数抛出错误,`pcall` 和 `xpcall` 函数用于捕获并处理错误。 IX. Lua 5.1 新增特性 Lua ...
支持全局变量和局部变量,局部变量可以通过`local`关键字声明。 - 表达式:Lua支持算术表达式、比较表达式和逻辑表达式。例如,`a = b + c`就是一个简单的赋值表达式。 - 函数:Lua中的函数是一等公民,可以作为...
学习源代码中的最佳实践,例如避免全局变量、合理利用引用计数和垃圾回收,以及减少不必要的计算,都是提高LUA程序性能的关键。 7. **协程(Coroutines)** LUA的协程是轻量级线程,它们允许多个任务并发执行而...
`_G`全局变量指向这个环境。局部变量的作用域仅限于其定义的块。 5. **元表(Metatables)**:元表是Lua中用于实现动态行为的关键机制,可以改变基本操作(如索引、相等性检查等)的行为。通过设置表的`__index`、`...
1. **全局环境(Global Environment)**:在Lua中,所有全局变量都存储于全局环境表中,这个表在内部被称为_G。LUA library中的函数和常量通常都会在这个环境中定义。 2. **元表(Metatables)**:Lua允许用户...
6. 全局环境与局部环境:LUA中的函数有独立的作用域,局部变量仅在其定义的函数内部可见,而全局变量在整个程序中都有效。 7. 错误处理:LUA采用异常机制,通过pcall和xpcall函数捕获和处理运行时错误。 8. 文件I/...
1. **基础语法**:Lua的语法规则相对简单,包括变量声明(全局和局部)、数据类型(如数字、字符串、布尔值、表、函数、nil)以及操作符。 2. **控制结构**:学习如何使用条件语句(if-then-else)、循环(for和...
`module`函数用于创建模块,`_G`全局环境变量可以访问全局变量。 6. **表与元表** 表是Lua的通用数据结构,可以通过元表实现类和对象的模拟。元表是一个表,它的`__index`和`__newindex`等字段可以定义表的行为。 ...
6. **模块(Module)**:Lua没有内置的模块系统,但可以通过全局变量或require函数来组织代码。require可以加载并执行一个脚本,返回其全局环境。 7. **错误处理**:Lua使用`error`函数抛出错误,通过`pcall`和`...
a) 全局变量:在Lua中,全局变量无需声明即可使用。 b) 未初始化的全局变量默认值为`nil`。 c) 删除全局变量:将变量赋值为`nil`,即可视为删除。 3. 数据类型 Lua支持多种数据类型: - `nil`: 代表空值,通常用于...
Lua没有内置模块系统,但可以通过全局变量和require函数实现模块化。require加载外部脚本,而module函数可以帮助组织代码并隐藏内部实现。 8. 面向对象编程: Lua通过table和元表实现面向对象编程。可以定义类...
4. **限制全局变量**:避免在文件中使用全局变量,除了特定情况下的`_G.instance`。局部变量和函数需使用`local`关键字定义。 5. **分号结尾**:常量、消息号、枚举值定义后应以分号`;`结尾,形成良好习惯。 6. **...
1. 变量:Lua是动态类型的语言,变量不需要提前声明。你可以直接赋值来创建变量,如`x = 10`。Lua支持数字和字符串两种基本类型,同时还有布尔型(true和false)、nil以及表(table)。 2. 表达式与运算符:Lua支持...
- 变量默认是全局的,可以通过 `local` 关键字声明局部变量。 - 支持多重赋值,例如 `a, b = b, a` 可以轻松交换两个变量的值。 3. **流程控制语句**: - **条件语句**:`if ... then ... elseif ... then ... ...
3. **暴露C++数据**:Luabind也支持将C++的全局变量或成员变量暴露给Lua: ```cpp module(luaState) [ class_("MyClass") .def_readwrite("myVariable", &MyClass::myVariable) ]; ``` 在Lua中,`myVariable...