求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 

Lua 教程
Lua开发环境
Lua基本语法
Lua变量
Lua数据类型
Lua运算符
Lua循环
Lua决策
Lua函数
Lua字符串
Lua数组
Lua迭代器
Lua表格
Lua模块
Lua元表
Lua协同程序
Lua文件I/O
Lua错误处理
Lua 高级教程
Lua调试
Lua垃圾收集
Lua面向对象
Lua Web编程
Lua数据库/MYSQL操作
Lua游戏编程
Lua标准库
 
 

Lua迭代器
61 次浏览
13次  
 捐助

迭代器是一种结构,使能够遍历所谓的集合或容器中的元素。在Lua中,这些集合通常是指那些用于创建各种数据结构,如数组表。

一般对于迭代器

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

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

当我们运行上面的代码之后将得到下面的输出

1  Lua
2 Tutorial

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

在Lua中,我们使用函数来表示迭代器。基于这些迭代器的功能状态保持,有两种主要类型:

无状态的迭代器

迭代器状态

无状态的迭代器

由名字本身就可以明白,这类型的迭代器功能不保留任何状态。

现在让我们来看看使用打印n个数的平方简单的函数,来创建我们自己的迭代器的例子。

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

当我们运行上面的程序,会得到下面的输出。

1	1
2 4
3 9

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

function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount
then currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end function 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 = 0
local count = #collection
-- The closure function is returned
return function ()
index = index + 1 if index <= count
then
-- return the current element of the iterator
return collection[index]
end
end
end for element in elementIterator(array)
do
print(element)
end

当我们运行上面的程序,会得到下面的输出。

Lua
Tutorial

在上面的例子中,我们可以看到,元素迭代具有另一种方法里,使用的本地外部变量索引和计数由每个函数被调用时递增索引,返回每个集合中的元素。

我们可以创建使用闭包的函数的迭代器,如上图所示,它可以返回多个元素,每一个我们通过收集循环时间。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



61 次浏览
13次
 捐助
 

每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号