lua中 迭代器

  1. 无状态迭代器
    --无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价
    
    
    function test(max,index)
    	if(index<max) then
    		index = index +1
    		return index,index+index
    	end
    end
    
    for i,n in test,5,0 do		-- 循环开始时,5传给函数test的max, 0传给函数test的index.  test的两个返回值分别赋值给i和n
    	print(i,n)				-- 接下来每次循环都会将i作为参数传张函数test的index.  max=5保持不变
    end
    
    
    
    
    function test2(max,index)
    	if(index < max) then
    		index = index +1
    		return index,index+index,index*index
    	end
    end
    for i,n,m in test2,5,0,1 do	--i,n,m 分别接收函数test2的三个返回值
    	print(i,n,m)
    end
    

  2. 多状态迭代器
    --很多情况下,迭代器需要保存多个状态信息而不是简单的状态常量和控制变量,
    --最简单的方法是使用闭包,还有一种方法就是将所有的状态信息封装到table内,
    --将table作为迭代器的状态常量,因为这种情况下可以将所有的信息存放在table内,
    --所以迭代函数通常不需要第二个参数。
    
    arr = {"hello","world","lua","java"}
    
    function test(arr)
    	local index = 0
    	local count = #arr
    	--闭包函数
    	return function()
    		index = index +1
    		if(index <= count) then
    			return arr[index]
    		end
    	end
    end
    
    for a in test(arr) do		
    	print(a)
    end
    
    for i,n in pairs(arr) do	-- pairs其实就是类似与test这样的函数,只不过返回两个参数
    	print(i,n)
    end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值