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之间的环境语义发生了变化: