Lua迭代器才有放回个函数的方法,for in的结构会循环调用该函数,直到第一个放回值为nil时,就会终止循环。
其中迭代器中的函数会利用upvalue的概念,如下面代码,变量i就是放回函数的upvalue,返回函数体中不断的对i变量做+1处理,i的值就是从0,1,2,3不断的往上加的。
local iter = function (tb)
local i = 0
return function ()
i = i + 1
if not tb[i] then
return nil
end
return i, tb[i]
end
end
local x = {10, 11, 12, 13, 14, 15}
for i, v in iter(x) then
print(i, v)
end
上面代码运行的结果是
1 10
2 11
3 12
4 13
5 14