Lua笔记之Lua迭代器

本文介绍了Lua中的迭代器,包括普通迭代器、与泛型for配合使用的迭代器、无状态迭代器和有多个状态的迭代器。通过迭代器工厂创建迭代器,利用closure保存状态,实现对table等数据结构的遍历。无状态迭代器的特点在于不保存任何状态信息,由for循环自身管理状态。
摘要由CSDN通过智能技术生成

一、普通迭代器

  书写方式为:

local function foo(t)
	local i = 0
	return function()
		i = i + 1
		return t[i]
	end
end

t = {1,2,3,4,5,6,7}
iter = foo(t)
while true do
	local element = iter()
	if element == nil then break end
	print(element)
end
解释:

1、首先创建一个迭代器工厂 foo ,就是用来产生一个迭代器的。

2、iter = foo(t)  的作用是创建一个迭代器

3、由于closure 能够保存非局部的变量,因此,iter 中保存着用于迭代计数的变量 i

4、在 while 循环中,每次调用 iter 就会使 i 的值加一,然后返回 table t 中的一个元素,知道返回的值为 nil 时退出循环。


二、与泛型 for 一起用的迭代器

  书写方式为:

local function foo(t)
	local i = 0
	return function()
		i = i + 1
		return t[i]
	end
end

t = {1,2,3,4,5,6,7}
for value in foo(t)do
	print(value)
end
解释:

1、创建一个迭代器工厂,用来产生一个迭代器

2、使用泛型 for 来迭代 table t

3、泛

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值