Lua笔记11-迭代器和闭包
来源:互联网 发布:淘宝助手上传成功错误 编辑:程序博客网 时间:2024/06/07 02:53
迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素。
迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里。闭包提供的机制可以很容易实现这个任务。记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量。每次闭包的成功调用后这些外部局部变量都保存他们的值(状态)。当然如果要创建一个闭包必须要创建其外部局部变量。所以一个典型的闭包的结构包含两个函数:一个是闭包自己;另一个是工厂(创建闭包的函数)。
写一个简单的迭代器,与ipairs()不同的是我们实现的这个迭代器返回元素的值而不是索引下标:
print("------------迭代器----------------------")function iter_director (tabt) local i = 0 local n = table.getn(tabt) return function () i = i + 1 if i <= n then return tabt[i] end endendt = {10,20,30}iter = iter_director(t)while true do local element = iter() if element == nil then break end print(element)end这个例子中iter_director是一个工厂,每次调用他都会创建一个新的闭包(迭代器本身)。闭包保存内部局部变量(tabt,i,n),因此每次调用他返回iter_director中的下一个元素值,当iter_direcotr中没有值时,返回nil。
这个迭代器也很容易用于范性for语句:
print("------------迭代器 into for ----------------------")tfor = {100,200,300}for i in iter_director(tfor) doprint(i)end
0 0
- Lua笔记11-迭代器和闭包
- Lua,JavaScript的闭包和迭代器笔记
- Lua笔记8-模块和包
- [Lua]lua闭包
- Lua笔记6-闭包1
- Lua笔记7-闭包2
- Lua的upvalue和闭包
- 神奇的Lua:闭包和upvalue
- Lua的upvalue和闭包
- Lua的upvalue和闭包
- Lua 模块和包
- Lua 闭包知识点 -- 学习过程笔记,会比较乱
- Lua学习——闭包、迭代器
- Lua学习——闭包、迭代器
- Lua初识之迭代器与闭包
- 什么是 lua 闭包
- Lua闭包学习
- lua闭包简介
- 构造器的讲解和使用(8.12)
- HDOJ-1875-畅通工程再续
- Java/JSP使用JNI技术调用本地动态链接库
- Raspberry PI上安装OpenWRT
- TableView省市区数组字典 属性传值
- Lua笔记11-迭代器和闭包
- MySQL字符集设置及字符转换(latin1转utf8)
- Java笔试面试题006
- RPC
- 关于java方法是传递值还是引用的思考
- 多线程编程 实战篇 (三)
- Android应用开发之所有动画使用详解
- 基于ftp模式搭建的yum服务器
- golang 数组切片(二)