迭代器for循环 一般通过一个叫作迭代器(iterators)的函数工作。 每次迭代,迭代器函数都会被调用以产生一个新的值, 当这个值为 nil 时,循环停止。
内容摘要: 迭代器 迭代器函数 paris iparis
--标准实现
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