使用这样的 lua 代码块:
local a, b
function fA ()
print(a)
function fB ()
print(b)
end
end
fA 究竟有多少个上值,1 还是 2?
使用这样的 lua 代码块:
local a, b
function fA ()
print(a)
function fB ()
print(b)
end
end
fA 究竟有多少个上值,1 还是 2?
根据定义,函数中使用的所有外部局部变量都算作上值。如前所述,在 Lua 5.2 中,如果函数使用全局变量,则环境还有一个隐藏的上值。
您可能希望使用luac -l -l
.
可能让您感到困惑的fB
是fA
. 回想一下,这
function fB () print(b) end
只是糖fB = function () print(b) end
。当您这样做时,很明显b
正在使用fA
并且您正在分配给全局变量fB
。fA
因此,您在 Lua 5.2 中获得了 3 个上值。(使用print
也意味着fA
使用全局变量。)如果使用local function fB ...
和删除print
,您会看到fA
在 5.1 和 5.2 中都使用了 2 个上值。
它的实现定义;可能是一两个。或三个(环境的一个升值)。你不知道,你永远不必关心。