全局范围内的局部变量Lua

NTS*_*716 1 lua scope global local love2d

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

local x = 1
Run Code Online (Sandbox Code Playgroud)

那个本地x和一个全局x之间有什么区别吗?

Oka*_*Oka 11

是的,因为它是创建它的块的本地.

Lua将一个块作为具有可变数量参数的匿名函数的主体处理(参见§3.4.11).因此,块可以定义局部变量,接收参数和返回值.此外,这种匿名函数被编译为名为_ENV的外部局部变量的范围(参见§2.2).结果函数始终将_ENV作为其唯一的upvalue,即使它不使用该变量.

考虑这个例子:

-- main.lua
require 'other'
print(x, y)
Run Code Online (Sandbox Code Playgroud)
-- other.lua
local x = 5
y = 10
Run Code Online (Sandbox Code Playgroud)

这将打印出来nil, 10,因为它x块的本地,而y被指定为加载块的任何环境upvalue.

也可以看看:

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