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

时间:2013-08-23 05:55:05

标签: lua

使用像这样的lua代码块:

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

fA究竟有多少upvalues,1或2?

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)

它的实现定义;它可能是一两个。或者三个(一个环境值)。你不知道,你从不必须关心。