【问题标题】:How upvalues are counted in nested Lua functions?在嵌套 Lua 函数中如何计算上值?
【发布时间】:2013-08-26 02:02:39
【问题描述】:

使用这样的 lua 代码块:

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

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

【问题讨论】:

    标签: lua


    【解决方案1】:

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

    您可能希望使用luac -l -l 读取为您的代码生成的字节码。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-07-01
        • 2014-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 2017-09-04
        • 2016-10-30
        相关资源
        最近更新 更多