迭代器for循環(huán) 一般通過一個(gè)叫作迭代器(iterators)的函數(shù)工作砸狞。 每次迭代,迭代器函數(shù)都會(huì)被調(diào)用以產(chǎn)生一個(gè)新的值镀梭, 當(dāng)這個(gè)值為 nil 時(shí)刀森,循環(huán)停止。
內(nèi)容摘要: 迭代器 迭代器函數(shù) paris iparis
--標(biāo)準(zhǔn)實(shí)現(xiàn)
for (var[,···]) in [iterfun, state,convar] do
body
end
-- iterfun ::= function(state,convar) return step,var
-- step 會(huì)成為下一次迭代的convar的值
-- state 狀態(tài)值
-- convar控制值 除第一個(gè)迭代使用初始报账,往后的迭代都是上一個(gè)迭代返回的 step 的值
如下是迭代器for循環(huán)的默認(rèn)執(zhí)行過程:
- 初始化撒强,計(jì)算 迭代函數(shù)、狀態(tài)值笙什、控制值 的值;如果不賦值默認(rèn)為nil胚想。
- 將狀態(tài)值和控制值作為參數(shù)調(diào)用迭代函數(shù)
- 將迭代函數(shù)返回的值賦給變量列表琐凭。
- 如果返回的第一個(gè)值為nil循環(huán)結(jié)束
- 如果返回的第一個(gè)值不為nil,把他賦值給inits 控制值
- 回到第二步再次調(diào)用迭代函數(shù)
--迭代器測試
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
運(yùn)行結(jié)果:
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