我正在阅读“在 Lua 中编程”,但我不明白这段代码中 Lua 中函数的行为:
function newCounter ()
local i = 0
return function () -- anonymous function
i = i + 1
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
从我的角度来看,每个电话
c1()
应该返回 1
因为 i
在 newCounter()
的开头被初始化为零.但它看起来像线local i = 0
在
c1()
的调用中被跳过.和 newCounter()
行为像对象而不是函数。我对Scheme和C#有一点了解,所以我熟悉一流的功能。函数返回函数对我来说没问题,但它如何存储 i
的值通话之间?
最佳答案
这是“正常”函数和 之间的区别。关闭 .
匿名函数,i
不是局部变量,也不是全局变量。它被称为非局部变量。请注意 i
执行匿名函数时超出范围:
print(c1()) --> 1
print(c1()) --> 2
这里的重点是,
i
的值存储在匿名函数中。该函数和所有非局部变量一起构成一个闭包。
关于lua - Lua 中的函数可以在调用之间存储本地值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962417/