需要帮助理解 Lua 脚本中变量范围的内容。

我有以下代码,我想了解 adder 函数中变量的范围。如何能够在调用时保留 x 的值?

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

a1 = adder(9)

a2 = adder(36)

print(a1(33)) --  42 如何能够在调用时保留 x 的值

print(a2(64)) --  100

当我第二次调用 adder 函数时,我得到了 42,这是如何实现的?

点赞
用户1009479
用户1009479

这个特性被称为 词法作用域,或者叫做 闭包。它意味着函数可以访问其封闭函数的变量。

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

匿名函数能够完全访问外部函数 adder 中的局部变量 x。在匿名函数内部,x 被称为非全局变量(或由于历史原因而称为上值),因为它既不是全局变量,也不是匿名函数的局部变量。

详情请参阅《Lua 编程》的 函数的更多信息 章节。

2013-09-19 01:06:30