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

更新日期: 2021 年 7 月 19 日

976 次浏览

开启你的 事业

通过完成课程获得认证

开始学习
广告
© . All rights reserved.