4

使用这样的 lua 代码块:

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

fA 究竟有多少个上值,1 还是 2?

4

2 回答 2

4

根据定义,函数中使用的所有外部局部变量都算作上值。如前所述,在 Lua 5.2 中,如果函数使用全局变量,则环境还有一个隐藏的上值。

您可能希望使用luac -l -l.

可能让您感到困惑的fBfA. 回想一下,这 function fB () print(b) end只是糖fB = function () print(b) end。当您这样做时,很明显b正在使用fA并且您正在分配给全局变量fBfA因此,您在 Lua 5.2 中获得了 3 个上值。(使用print也意味着fA使用全局变量。)如果使用local function fB ...和删除print,您会看到fA在 5.1 和 5.2 中都使用了 2 个上值。

于 2013-08-23T10:26:38.747 回答
2

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

于 2013-08-23T06:08:07.713 回答