闭包:通过调用含有一个内部函数加上该外部函数持有的外部局部变量(upvalue)的外部函数(就是工厂)产生的一个实例函数
闭包组成:外部函数+外部函数创建的upvalue+内部函数(闭包函数)
闭包在迭代器中的运用:迭代器需要保留上一次调用的状态和下一次成功调用的状态,刚好可以使用闭包的机制来实现
创建迭代器:(一定要注意迭代器只是一个生成器,他自己本身不带循环)
function list_iter(t)
local i=0
local n=table.getn(t)
return function()
i=i+1
if i<=n then return t[i] end
end
end
//这里的list_iter是一个工厂,每次调用都会产生一个新的闭包该闭包内部包括了upvalue(t,i,n)
//因此每调用一次该函数产生的闭包那么该闭包就会根据记录上一次的状态,以及返回list的下一个