使用像这样的lua代码块:
local a, b
function fA ()
print(a)
function fB ()
print(b)
end
end
fA究竟有多少upvalues,1或2?
答案 0 :(得分:4)
根据定义,函数中使用的所有外部局部变量都计为upvalues。 如前所述,在Lua 5.2中,如果函数使用全局变量,则还有一个隐藏的环境upvalue。
您可能希望使用luac -l -l
读取为代码生成的字节码。
可能让您感到困惑的是fB
正文中fA
的定义。回想起那个
function fB () print(b) end
只是fB = function () print(b) end
的糖。执行此操作后,很明显b
中正在使用fA
,并且您正在分配全局变量fB
。因此,在Lua 5.2中,fA
得到3个upvalues。 (使用print
也意味着fA
使用全局变量。)如果您使用local function fB ...
并删除print
,您会看到fA
使用2 5.1和5.2中的upvalues。
答案 1 :(得分:2)
它的实现定义;它可能是一两个。或者三个(一个环境值)。你不知道,你从不必须关心。