LUA基础-5迭代器

迭代器for循环 一般通过一个叫作迭代器(iterators)的函数工作。 每次迭代,迭代器函数都会被调用以产生一个新的值, 当这个值为 nil 时,循环停止。

--标准实现
for (var[,···]) in [iterfun, state,convar] do
    body
end

-- iterfun ::= function(state,convar) return step,var
-- step 会成为下一次迭代的convar的值

-- state  状态值
-- convar控制值 除第一个迭代使用初始,往后的迭代都是上一个迭代返回的 step 的值

如下是迭代器for循环的默认执行过程:

  • 初始化,计算 迭代函数、状态值、控制值 的值;如果不赋值默认为nil。
  • 将状态值和控制值作为参数调用迭代函数
  • 将迭代函数返回的值赋给变量列表。
  • 如果返回的第一个值为nil循环结束
  • 如果返回的第一个值不为nil,把他赋值给inits 控制值
  • 回到第二步再次调用迭代函数

--迭代器测试
function add(state,convar)
	if (convar<state) then
            print("state",state,"convar",convar)
		return convar+1,convar*2
	end
end

for i,n in add,4,0
do
   print("k : " , i , "val : " ,n)
end

运行结果:
state	4	convar	0
k : 	1	val : 	0
state	4	convar	1
k : 	2	val : 	2
state	4	convar	2
k : 	3	val : 	4
state	4	convar	3
k : 	4	val : 	6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿石散人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值