举例说明关于 Lua闭包 的存在价值
来源:互联网 发布:快餐软件有哪些 编辑:程序博客网 时间:2024/05/23 00:03
关于Lua的闭包的用法。
动态语言闭包是一大特色,但是知道如何产生一个闭包,不知道闭包如何来使用就会变成一个非常尴尬的问题。前几天突然想明白了。跟大家说说。有其他好的理解也欢迎来和俺讨论切磋。
for i in iter() do
print(i)
end
这是Lua的泛型for的一个伪代码。Lua提供了一些迭代器比如 pairs()这个东西。问题这个迭代器是如何写的呢?我们把for拆开来看iter会一直被调用 直到iter返回 nil为止。所以说 iter这个函数是一直被调用的。想想写法很容易想到闭包的特性。
让我们回顾一下闭包。
function iter()
local a = 0
return function()
a = a + 1
end
end
上面就是一个闭包的写法。当我们调用iter的时候我们可以 fun = iter() 然后通过 fun()来调用 内部的闭包.这个时候a会一直递增下去.很多人一定很闷 为啥? 因为lua的语句块的关系,当我们 fun = iter() 的时候 fucntion()会被 return 这时候我们的 a就是一个闭包的变量,这个 环境会被 重复调用 a这个 valueup就会被一直加下去.所以解释了 为啥 a为什么会一直加下去.这是一个神奇的事情,当然这个神奇的现象会给我带来很多便利.让代码更加的工整.
现在我们想遍历一个 数组
tab[] = {1,2,3,4,5,6,7,8}
我们就可以使用闭包来定义一个迭代器来使用.
function iter()
local index = 0
return function()
index = index + 1
return tab[index]
end
end
之后我们就可以使用这个迭代器来遍历整个tab
for i in iter() do
print(i)
end
结果:
1
2
3
4
5
6
7
8
好处究竟在哪里呢?可以看到 iter()这个函数 我们通过 fun=iter()可以拿到一个闭包函数,之后调用循环调用 fun就可以得到所有的tab的值 这就是闭包的优雅之处,如果不然,我们就需要把很多的++放到外面来书写.这样使用闭包对于写代码的人会累,但是对于看代码的人会更加的直观,这种清新的表达方式就是闭包这个语法特性的好处.他可以隐藏一些规则然后通过重复的调用来解决问题.
- 举例说明关于 Lua闭包 的存在价值
- 举例说明关于 Lua闭包 的存在价值
- 关于lua的闭包自我理解
- 软件存在的价值
- 存在的价值
- 引用的存在价值
- 关于open操作的O_EXCL的存在应用价值理解
- Lua的闭包
- 关于Lua的面向对象和闭包的理解
- 关于lua的闭包(Closure)和Upvalue
- 代码生成器的存在价值
- 有足够的存在价值
- 大数据存在的价值
- [Lua]lua闭包
- lua 函数的闭包
- lua 闭包的概念
- Lua闭包的理解
- Lua闭包的详解
- ubuntu10.10 安装mysql5.1.34
- ORM中数据模型生成利器T4 Templates
- C# 导出Excel "正在中止线程" 错误
- 为什么我的积分变成了负数
- C/C++连接查询MYSQL
- 举例说明关于 Lua闭包 的存在价值
- Design Pattern
- 指尖检测的新方法几种
- 测试2
- 安装TClientSock和TServerSocket
- 常用汉字基础字库
- JQuery 表单笔记
- Vikings V2用户手册
- 第一篇博文:兔年的赚钱十法则