gpt4 book ai didi

lua - Lua 中的函数可以在调用之间存储本地值吗?

转载 作者:行者123 更新时间:2023-12-05 00:22:25 28 4
gpt4 key购买 nike

我正在阅读“在 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因为 inewCounter() 的开头被初始化为零.但它看起来像线
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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com