Lua 中的全局作用域局部变量

假设我有一个 Lua 文件,在最上方,我定义了一个不在任何函数内的变量,但我将其称为 local

local x = 1

那个局部变量 x 和一个全局变量 x 有什么区别吗?

点赞
用户2505965
用户2505965

是的,因为它是在chunk内创建的局部变量。

Lua 将一个 chunk 视为一个带有可变数量参数的匿名函数的主体(见第3.4.11节)。因此,chunks可以定义局部变量,接收参数和返回值。此外,这个匿名函数在一个名为 _ENV 的外部局部变量的范围内编译(见第2.2节)。结果函数始终有 _ENV 作为唯一的upvalue,即使它不使用该变量。

考虑这个例子:

-- main.lua
require 'other'
print(x, y)

-- other.lua
local x = 5
y = 10

这将打印出 nil, 10,因为 x 是局部于 chunky 是为 chunk 加载在的任何 environment 分配的 _upvalue_。

另请参阅:

请注意,在 Lua5.1 和 Lua5.2 之间,environments 的语义发生了变化:

2016-10-23 23:01:16