Lua 编程中的闭包是什么?

在 Lua 中,任何函数都是一个闭包。从狭义上讲,闭包是一个匿名函数,就像您示例中的返回函数一样。

闭包是一流的:它们可以分配给变量,传递给函数并从它们返回。它们可以是 Lua 表中的键和值。

与 C++ 或 PHP 不同,Lua 中的闭包可以访问局部范围内的所有变量——上值,无需显式声明上值。当代码执行离开设置它们的块时,上值仍然存在。

现在我们知道闭包是什么以及它为什么有用,让我们举个例子看看它是如何工作的。

示例

考虑下面显示的例子 -

function simpleCounter()
   local i = 0
   return function () -- anonymous function
      i = i + 1
         return i
      end
   end
c1 = simpleCounter()
   print(c1()) --> 1
   print(c1()) --> 2
c2 = simpleCounter()
   print(c2()) --> 1
   print(c1()) --> 3
   print(c2()) --> 2
输出结果
1
2
1
3
2