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



假设我有一个lua文件,在顶部,我在任何函数之外定义了一个变量,但我将其命名为local

local x = 1

局部x和全局x有什么区别吗?

是的,因为它是在中创建的。

Lua将块作为带有可变数量参数的匿名函数体来处理(参见§3.4.11)。因此,块可以定义局部变量、接收参数和返回值。此外,这样的匿名函数被编译为在名为_ENV的外部局部变量的作用域中(参见§2.2)。生成的函数总是将_ENV作为其唯一的上值,即使它不使用该变量。

考虑这个例子:

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

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

这将打印出nil, 10,因为x对于是本地的,而y对于加载的任何环境都被分配为upvalue

参见:

  • §2.2 -环境和全球环境
  • §3.3.7 -局部声明
注意环境的语义在Lua5.1和Lua5.2之间发生了变化:
  • Lua 5.1:§2.9 - Environments

最新更新