Lua学习笔记(三)

本文深入探讨了Lua中的迭代器概念,包括迭代器与closure的关系,泛型for的语义,无状态和复杂状态的迭代器实现,并介绍了如何设计“真正”的迭代器。文章通过实例详细解释了迭代器在Lua中的应用和工作原理。
摘要由CSDN通过智能技术生成

八、迭代器与泛型for

迭代器是一种可以遍历一种集合中所有元素的机制。在Lua中,迭代器用函数表示,每调用一次函数即返回集合中的“下一个”元素。

1、迭代器与closure

每个迭代器都需要在每次成功调用之间保持一些状态,这样才能知道它所在位置及如何到下一个位置。closure为此提供了支持。因此迭代器遍历集合需要一个closure和创建该closure的工厂函数。

例如一个用于遍历数组的工厂函数(返回一个迭代器函数):

function values(t)   --t is a table

       local i=0

       return function () i=i+1;return t[i] end

end

values()是一个工厂,返回的函数用于遍历一个table。每当调用values函数就创建一个新的closure(包括迭代函数和相关的非局部的变量)。

使用values有以下方法:

①while

t={10,20,30}

it=values(t)    --     创建迭代器

while true do

       local element=it()   --调用迭代器获得集合的值

       if element == nil then break

       else print(element)

       end

end

②泛型for

for element invalues(t) do

       print(element)

end

泛型for在内部保存了迭代函数,因此不需要显式地指定一个values返回值&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值