当前位置: 首页 > news >正文

无涯教程-Lua - Iterators(迭代器)

迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用表,这些表用于创建各种数据结构(如数组)。

通用迭代器

通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。

array={"Lua", "Tutorial"}for key,value in ipairs(array) 
doprint(key, value)
end

当无涯教程运行上面的代码时,将获得以下输出-

1  Lua
2  Tutorial

上面的示例使用了Lua提供的默认 ipairs 迭代器函数。

在Lua中,使用函数来表示迭代器。基于这些迭代器函数的状态维护,有两种主要类型-

  • 无状态迭代器
  • 有状态迭代器

无状态迭代器

通过名称本身,可以理解这种类型的迭代器函数不保留任何状态。

现在让无涯教程看一个使用简单的函数创建自己的迭代器的示例,该函数打印 n 的平方。

function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber=currentNumber+1return currentNumber, currentNumber*currentNumberendendfor i,n in square,3,0
doprint(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

可以稍微修改上面的代码,以模仿迭代器的 ipairs 函数的工作方式。如下所示。

function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber=currentNumber+1return currentNumber, currentNumber*currentNumberendendfunction squares(iteratorMaxCount)return square,iteratorMaxCount,0
end  for i,n in squares(3)
do print(i,n)
end

当运行上面的程序时,将得到以下输出。

1	1
2	4
3	9

有状态迭代器

之前使用函数进行迭代的示例未保留状态。每次调用该函数时,它都会根据发送给该函数的第二个变量返回集合的下一个元素。为了保持当前元素的状态,使用了闭包,闭包在函数调用之间保留变量值。

现在,让无涯教程看一个创建自己的迭代器的示例,其中将使用闭包。

array={"Lua", "Tutorial"}function elementIterator (collection)local index=0local count=#collection-- The closure function is returnedreturn function ()index=index + 1if index <= countthen-- return the current element of the iteratorreturn collection[index]endendendfor element in elementIterator(array)
doprint(element)
end

当运行上面的程序时,将得到以下输出。

Lua
Tutorial

在上面的示例中,无涯教程可以看到elementIterator内部有另一个方法,该方法使用局部外部变量index和count每次调用函数时通过增加索引来返回集合中的每个元素。

Lua - Iterators(迭代器) - 无涯教程网无涯教程网提供迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用...https://www.learnfk.com/lua/lua-iterators.html

http://www.lryc.cn/news/107764.html

相关文章:

  • HTML+CSS+JavaScript:实现B站评论发布效果
  • 实战 - 利用 ThreadLocal 线程局部变量实现数据缓存
  • wxwidgets Ribbon使用简单实例
  • 2023年第四届“华数杯”数学建模思路 - 案例:最短时间生产计划安排
  • LeetCode404. 左叶子之和
  • Nginx 高性能内存池 ----【学习笔记】
  • iOS--frame和bounds
  • docker logs 使用说明
  • Ceph入门到精通-Ceph PG状态详细介绍(全)
  • 【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树
  • 【JVM】(二)深入理解Java类加载机制与双亲委派模型
  • npm i 报错项目启动不了解决方法
  • 【从零开始学习JAVA | 第三十七篇】初识多线程
  • 微信新功能,你都知道吗?
  • Android 中 app freezer 原理详解(二):S 版本
  • Vue3_04_ref 函数和 reactive 函数
  • 05 Ubuntu下安装.deb安装包方式安装vscode,snap安装Jetbrains产品等常用软件
  • 性能测试jmeter连接数据库jdbc(sql server举例)
  • 8.3 C高级 Shell脚本
  • 2023年华数杯A题
  • 【零基础学Rust | 基础系列 | 函数,语句和表达式】函数的定义,使用和特性
  • 加解密算法+压缩工具
  • FeignClient接口的几种方式总结
  • springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池
  • 剑指Offer 05.替换空格
  • ChatGPT的功能与特点
  • Vue2.0基础
  • rust 如何定义[u8]数组?
  • 关于Hive的使用技巧
  • 【C++】BSTree 模拟笔记