【问题标题】:lua script :need help to understand the scope of an variablelua 脚本:需要帮助来理解变量的范围
【发布时间】:2013-09-23 22:40:16
【问题描述】:

我有以下代码,我想了解该加法器函数中变量的范围。它如何能够在通话时保留x 值?

function adder(x)
    return function (y) return x + y end
end

a1 = adder(9)

a2 = adder(36)

print(a1(33)) --  42 how this can able to retain the value of x

print(a2(64)) --  100

当我第二次调用那个加法器函数时,我得到了42。这怎么可能?

【问题讨论】:

    标签: lua closures scope


    【解决方案1】:

    此功能称为词法作用域,或者它是一个闭包。这意味着函数可以访问其封闭函数的变量。

    function adder(x)
        return function (y) return x + y end
    end
    

    匿名函数可以完全访问封闭函数adder 中的局部变量xx 在匿名函数内部被称为非全局变量(或历史原因的上值),因为它既不是全局变量也不是匿名函数的局部变量。

    详情请阅读章节More about Functions in Programming in Lua

    【讨论】:

    • "print(a1(33))" 这会直接调用那个匿名函数吗?
    • @user2793492 是的,匿名函数(变量x的值)现在存储在变量a1中。
    • 根据我的理解“a1 = adder(9)”——这次我们将 9 作为 arg 传递给该函数 adder(x) 但是在这个调用 print(a1(33)) : : 33 也属于 x 对.. 但我得到了 X+y 。你能解释一下吗?
    • @user2793492 不是真的。在对a1(33) 的调用中,33 作为y 的值传递,作为a1 的参数。
    • @Bee.. 我不关注你了,为什么不读 PiL 书,它有一个更简单的闭包示例,开始理解它。
    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多