全局范围内的局部变量Lua

时间:2016-10-23 21:42:42

标签: lua scope global local love2d

所以,让我说我有一个lua文件,在顶部,我在任何函数之外定义一个变量,但我把它称为本地

local x = 1

本地x和全局x之间是否存在差异?

1 个答案:

答案 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之间发生了变化: