Lua 学习笔记(六) —— 迭代器和泛型for
来源:互联网 发布:sop流程图软件 编辑:程序博客网 时间:2024/06/07 23:37
今天开始迭代器的学习,看了《Programming in Lua 》这一章,看了2遍才稍微弄懂了一点儿,在这里与大家一起分享。
一、迭代器就是遍历集合的元素
这是一个简单的迭代器程序,用途是遍历t这个table中的值
function value(t)local i = 0return function()i = i + 1return t[i]endend
调用迭代器:
t = {10,20,30}local iter = value(t) -- 创建迭代器while true do-- 尽可能的使用局部变量,调用迭代器<span style="white-space:pre"></span>local e = iter()<span style="white-space:pre"></span>if e then<span style="white-space:pre"></span>print(e)<span style="white-space:pre"></span>else<span style="white-space:pre"></span>break;<span style="white-space:pre"></span>endend创建一个closure(迭代器)后,保存在变量iter中,此后循环调用时就不会产生新的closure。
二、泛型for语句
首先,for对in后面的表达式求值,表达式返回迭代器函数、恒定状态和控制变量的初值给for保存。然后,for会以恒定状态和控制变量来调用迭代器函数。
最后,for执行循环体,直到迭代器函数的第一个返回值为nil。循环结束。
又是上面的例子,这次是用泛型for调用迭代器:
t = {10,20,30} --数组for v in value(t) doprint(v)end相当于:
do--1. for对in后面的表达式求值,返回值:_f:迭代函数 _s:恒定状态 _var:控制变量的初始值local _f,_s,_var = value(t)--2. for进入循环状态while true dolocal v = _f(_s,_var) --调用迭代函数_var = vif _var == nil then break --3. 结束循环endprint(v)endend
三、迭代器接受函数作为参数,在其内部的循环中调用函数
这段代码表示在遍历当前文件中所有的单词:
function allwords(f)for line in io.lines() do-- io.lines 迭代函数:从文件中读取一行for word in string.gmatch(line,"%w+") do--string.gmatch迭代函数:从line中查找单词f(word)endendendallwords(print)
0 0
- Lua 学习笔记(六) —— 迭代器和泛型for
- Lua学习笔记-迭代器和泛型for
- Lua学习笔记六——package
- Lua学习笔记六——package
- Lua学习笔记六——package
- Lua学习笔记六——package
- Lua学习笔记(六)—— 数组与集合
- Lua学习笔记(六)
- Lua学习(七)-----迭代器和泛型for
- Lua学习笔记 第七章 迭代器与泛型for
- Lua笔记7-迭代器和泛型for
- Lua中的迭代器和泛型for学习总结
- 6.lua学习笔记:迭代器和for泛型
- 六、Lua中的迭代器与泛型for
- Lua学习笔记之迭代器与范型for
- Lua迭代器和泛型for)
- lua中的泛型for 和迭代器
- Lua迭代器和泛型for
- 润乾集算报表多样性数据源之混合多源
- redis学习笔记2,配置文件
- 编写自己的list容器
- MATLAB批量读取文件代码
- ubuntu循环登录或登录后黑屏
- Lua 学习笔记(六) —— 迭代器和泛型for
- EasyUI Combobox 设置默认值
- handler用法
- iOS XMPP App run background (by voip)
- Find Minimum in Rotated Sorted Array
- 友推sdk集成常见问题2:为什么demo中微信和新浪微博无法分享,微信甚至不能调出微信界面?
- 53个要点提高PHP编程效率
- iOS 代码截图
- redis学习笔记3,String类型