Lua中的闭包|果冻想
本文是对于“果冻想”的《Lua入门系列》所作笔记,原文来自上面链接。
什么是闭包
闭包是由函数和与其相关的引用环境组合而成的实体:
function newCounter( )
local i = 0
return function ( )
i = i + 1
return i
end
end
c1 = newCounter()
print(c1()) --1
print(c1()) --2
上述代码中的newCounter函数返回了一个函数,而这个返回的匿名函数就是闭包的组成部分中的函数;引用环境就是变量i所在的环境。实际上,闭包只是在形式和表现上像函数,但实际上不是函数,我们都知道,函数就是一些可执行语句的组合体,这些代码语句在函数被定义后就确定了,并不会再执行时发生变化,所以函数只有一个实例。而闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
再看闭包
可以在Lua的函数中再定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有局部变量,而这些变量就被称为该内嵌函数的upvalue,upvalue实际指的是变量而不是值,这些变量可以在内部函数之间共享。