所以,让我说我有一个lua文件,在顶部,我在任何函数之外定义一个变量,但我把它称为本地
local x = 1
本地x和全局x之间是否存在差异?
答案 0 :(得分:11)
是的,因为它是在chunk中创建的。{/ p>
Lua将一个块作为具有可变数量参数的匿名函数的主体处理(参见§3.4.11)。因此,块可以定义局部变量,接收参数和返回值。此外,这种匿名函数被编译为名为_ENV的外部局部变量的范围(参见§2.2)。结果函数始终将_ENV作为其唯一的upvalue,即使它不使用该变量。
考虑这个例子:
-- main.lua
require 'other'
print(x, y)
-- other.lua
local x = 5
y = 10
这将打印出nil, 10
,因为x
是块的本地,而y
被指定为 upvalue 对于加载 chunk 的环境。
另见:
请注意,环境的语义在Lua5.1和Lua5.2之间发生了变化: