Lua closure
2016-06-24 本文已影响525人
AlbertS
前言#
“closure”,一个之前我从没见过的词出现在了lua的编程世界中,lua将其解释为闭包,它具有着这种特性:将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特性称之为词法域。
示例#
接下来我们可以利用这个特性来实现一个自己的计数器:
- 首先我们新建一个lua文件,命名为counter.lua
- 在文件中编写lua代码
- 实现计数器的代码如下:
-- 实现部分
function create_a_counter()
local count=0
return function()
count = count + 1
return count
end
end
-- 调用部分
local mycounter = create_a_counter();
print("counter = "..mycounter())
print("counter = "..mycounter())
print("counter = "..mycounter())
print("counter = "..mycounter())
print("counter = "..mycounter())
print("counter = "..mycounter())
- 结果
总结#
- 我们可以利用这项特性实现很多功能,比如计数器。
- 调用的时候需要注意,需要调用mycounter()而不是 create_a_counter()。
- create_a_counter()返回的是一个函数而不是一个值,如果你试图打印它,只能得到类似这样的结果function: 002EFE40