在Lua
中,closure
就是一个函数加上其它能够让这个函数正确访问non-local
变量(也称之为upvalue
)的一切(Simply put, a closure is a function plus all it needs to access non-local variables correctly.
)。参看下面程序:
function newCounter()
local i = 0
return function()
i = i + 1
return i
end
end
c1 = newCounter()
print(c1())
print(c1())
c2 = newCounter()
print(c2())
newCounter()
被称作factory
,它用来创建closure function
和closure function
所访问的变量i
。执行代码如下:
1
2
1
可以看到,每次调用newCounter()
,都会返回一个新的closure
,而这些closure
都会访问自己的i
变量。