Lua 迭代器
2015-10-28 17:24
381 查看
第一种:lua迭代器的实现依赖于闭包(closure)特性
1.1 第一个简单的写法
第二种:使用泛型for实现
2.1 语法
注:各种复杂的迭代器实现就是对迭代器函数(iter)和恒定变量(table)的各种变形
1.1 第一个简单的写法
--迭代器写法 function self_iter( t ) local i = 0 return function () i = i + 1; return t[i] end end
-- 使用 local t = {10, 20, 30} local iter = self_iter(t) -- 这里就是使用了闭包函数的特性 while true do local element = iter() if element == nil then break end print(element) end
第二种:使用泛型for实现
2.1 语法
for <var-list> in <exp-list> do <body> end
2.2 泛型for理解:for做的第一件事就是对in后面的表达式进行求值,返回3个值,分别是迭代器函数(iter),恒定变量(table),控制变量(i),之后就会使用恒定变量和控制变量来调用迭代器函数 2.3 泛型for迭代器实现例子
-- 迭代器 local function self_iter( list, i ) i = i + 1 local v = list[i] print(v) if v then return i, v end end -- for 初始化 function self_ipairs( list ) return self_iter, list, 0 end -- 使用 local a = {10, 20, 40} for k, v in self_ipairs(a) do print(k, ' ', v) end
注:各种复杂的迭代器实现就是对迭代器函数(iter)和恒定变量(table)的各种变形
相关文章推荐
- Lua 变长参数(variable number of arguments)
- Deploy openresty + lua + zabbix
- 使用ngx_lua发送文件给服务器
- robot framework万能的evaluate
- Lua
- lua文件读写
- Lua中的操作系统库
- Lua table 引用
- Lua 语言 15 分钟快速入门
- Lua中的基本函数库
- Lua资料总结
- 用Java内置的JS引擎实现Infix Expression Evaluation
- Lua学习简单正则匹配笔记
- Lua的function、closure和upvalue
- MAC上Lua开发环境搭建
- LuaJava:跟着LuaJava一步一步学习JNI -1
- 转让lua性能executeGlobalFunction
- Lua开发环境搭建(二)--使用Editplus编写Lua脚本
- Evaluate Reverse Polish Notation
- Lua开发环境搭建(一)--使用VS2012编译Lua