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

标签 lua closures

我正在阅读“在 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/

相关文章:

lua - 我如何才能在 Awesome wm 3.5 版中只有任务列表中的应用程序图标?

c# - 如何将 int 转换为字节数组然后再转换回来?

c - 数组元素的类型不完整

Swift func 签名和默认参数值语法?

closures - 无法将闭包作为参数传递

closures - mapcan,尖锐的报价和关闭

ios - Swift - 如何在释放调用者时从数组中正确删除 block ?

c++ - 我应该通过 const 引用传递一个 lambda。

lua - 从 C 调用 Lua

lua - 如何避免 Lua 脚本限制中的 Redis 调用?