嵌套Lua函数中的upvalues是如何计数的?

嵌套Lua函数中的upvalues是如何计数的?,lua,Lua,使用lua代码块,如下所示: local a, b function fA () print(a) function fB () print(b) end end fA到底有多少个upvalues,1或2?它的实现定义;可能是一两个。或三个(一个环境值)。你不知道,也不必在意。根据定义,函数中使用的所有外部局部变量都算作upvalue。 如前所述,在Lua5.2中,如果函数使用全局变量,则环境也有一个隐藏的upvalue 您可能需要使用luac-l-l读

使用lua代码块,如下所示:

local a, b
function fA ()
    print(a)
    function fB ()
        print(b)
    end
end

fA到底有多少个upvalues,1或2?

它的实现定义;可能是一两个。或三个(一个环境值)。你不知道,也不必在意。

根据定义,函数中使用的所有外部局部变量都算作upvalue。 如前所述,在Lua5.2中,如果函数使用全局变量,则环境也有一个隐藏的upvalue

您可能需要使用
luac-l-l
读取为代码生成的字节码

可能让您困惑的是
fA
正文中的
fB
的定义。回想一下
function fB()print(b)end
只是
fB=function()print(b)end的糖。当您这样做时,很明显,
b
正在
fA
中使用,并且您正在分配一个全局变量
fB
。因此,在Lua5.2中,
fA
得到3个向上的值。(使用
print
还意味着
fA
使用全局变量。)如果使用
local函数fB…
并删除
print
,您将看到
fA
在5.1和5.2中都使用2个向上值