1. 第一种:lua迭代器的实现依赖于闭包(closure)特性

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
  1. 第二种:使用泛型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 迭代器的更多相关文章

  1. Lua学习十一----------Lua迭代器

    © 版权声明:本文为博主原创文章,转载请注明出处 Lua迭代器 - 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址 - Lu ...

  2. Step By Step(Lua迭代器和泛型for)

    Step By Step(Lua迭代器和泛型for) 1. 迭代器与Closure:    在Lua中,迭代器通常为函数,每调用一次函数,即返回集合中的"下一个"元素.每个迭代器都 ...

  3. Lua迭代器和泛型for

    1.迭代器与closure 在lua中,迭代器通常为函数,每调用一次函数,会返回集合中的下一个元素.每个迭代器在成功调用的时候,都需要保存一些状态,closure(闭包)完美为迭代器运用而生. fun ...

  4. lua迭代器和仿制药for

    不管是什么样的结构,你只需要同意遍历集合可以称为迭代器的所有元素.lua常用来形容叙事功能迭代器.个元素.每个迭代器都须要保存一些状态来知道当前处于什么位置和怎样进行下一次迭代. 对于这种任务.闭包提 ...

  5. lua迭代器和泛型for浅析

    (一) 首要概念要理清: 1. 在lua中,函数是一种"第一类值",他们具有特定的词法域."第一类值"表示在lua中函数与其他传统类型的值(例如数字和字符串)具 ...

  6. Lua 迭代器与closure

    所谓“迭代器”就是一种可以遍历(iterate over)一种极和中所有元素的机制.在Lua中,通常将迭代其表示为函数.每调用一次函数,即返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之间 ...

  7. [Lua] 迭代器 闭合函数 与 泛型for

    首先看看一下闭合函数(closure),见如下代码: function newCounter() local i = 0 -- 非局部变量(non-local variable) return fun ...

  8. Lua迭代器

    在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素.迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,可以通过闭包提供的机制来实现这个任务(闭包中的外部局部变量可以用 ...

  9. Lua 学习笔记(九)协同程序(线程thread)

    协同程序与线程thread差不多,也就是一条执行序列,拥有自己独立的栈.局部变量和命令指针,同时又与其他协同程序共享全局变量和其他大部分东西.从概念上讲线程与协同程序的主要区别在于,一个具有多个线程的 ...

随机推荐

  1. hdu_2476_String painter(区间DP)

    题目链接:hdu_2476_String painter 题意: 有a,b两字符串,现在你有一个刷子,每次可以任选一个区间,使这个区间变成你想要的字符,现在让你将a变成b,问最少刷多少次 题解: 考虑 ...

  2. .Net Core Session验证码

    1.验证码帮助类 namespace IdeaCore.Services.Common { public class ValidateCodeService : IValidateCodeServic ...

  3. web小技巧

    如内容超出单元格,则隐藏style="TABLE-LAYOUT: fixed" 让弹出窗口总是在最上面: <body onblur="this.focus();&q ...

  4. Java comparable 和 comparator

    一.comparator 接口继承 public class ComparatorTest { /** * @param args */ public static void main(String[ ...

  5. static 控件颜色修改

    在对话框上放一个StaticText控件后如果文字长度不能铺满控件的 rect,如下: 那么运行时会出现如下效果 通过MSG_WM_CTLCOLORSTATIC消息修改static控件背景色模式为透明 ...

  6. 让 idea webstorm phpstorm 能够 识别 thinkphp 的方法(自动提示功能)

    1.在/ThinkPHP/Library/Think 目录下 新建一个文件,名为:  BaseController.class.php 2.BaseController.class.php 内容为 n ...

  7. 洛谷-A+B Problem-洛谷的第一个任务

    题目描述 Description 输入两个整数a,b,输出它们的和(a,b<=10^9)  输入输出格式 Input/output 输入格式:两个整数以空格分开输出格式:一个数  输入输出样例  ...

  8. swift中JSon数据的处理

    import UIKit class MainTabBarViewController: UITabBarController { override func viewDidLoad() { supe ...

  9. 21.编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E。要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public void speak() 方法,在speak方法中输出“咿咿呀呀......”的信息。 (2)People类是Monkey类的子类,在People类中重写方法speak(),在speak方法 中输出“小样

    //Monkey类 package d922; public class Monkey { Monkey() { } Monkey (String s) { System.out.println(s) ...

  10. npm常用指令

    安装: npm install <name> npm install <name> 安装依赖包,默认安装最新版本,也可在后面加上版本号,并且将安装信息加入项目的package. ...