lua迭代器的用法为:
for k, v in (i)pairs(t) do
print(k,v)
end
我们搞懂for...in做了什么的就明白上面代码的实现了。
其实for..in后面需要一个迭代函数,该函数可以有两个参数,一个是状态常量,一个是控制变量。例如:
local ipairsIter = function(t, i)
i = i + 1
local v = t[i]
if v then
return i, v
end
end
for k, v in ipairsIter, {1,2,3,4}, 0
print(k,v)
end
for..in的实现为:
do
local _f, _s, _var = explist
while true do
local var_1, ... , var_n = _f(_s, _var)
_var = var_1
if _var == nil then break end
block
end
end
可以看到依次调用迭代函数,控制变量则为前一个迭代函数返回的第一个值。
lua中iparis迭代器可以用ipairsIter()迭代器函数,因为他正好是根据数字下标来索引的。那么pairs又是怎么实现的呢?
这个要用到一个内置函数,next。next作用于一个table的时候,会返回一个key,val,例如t = {a=1,b=2,c=3},next(t)=>a,1 next(t,'a') => b, 2 next(t, 'b') =>c,3可能顺序会有所不同。
参考: