假设我有一个lua文件,在顶部,我在任何函数之外定义了一个变量,但我将其命名为local
local x = 1
局部x和全局x有什么区别吗?
是的,因为它是在块中创建的。
Lua将块作为带有可变数量参数的匿名函数体来处理(参见§3.4.11)。因此,块可以定义局部变量、接收参数和返回值。此外,这样的匿名函数被编译为在名为_ENV的外部局部变量的作用域中(参见§2.2)。生成的函数总是将_ENV作为其唯一的上值,即使它不使用该变量。
考虑这个例子:
-- main.lua
require 'other'
print(x, y)
-- other.lua
local x = 5
y = 10
这将打印出nil, 10
,因为x
对于块是本地的,而y
对于加载块的任何环境都被分配为upvalue。
参见:
- §2.2 -环境和全球环境
- §3.3.7 -局部声明
- Lua 5.1:§2.9 - Environments