Lua:迭代器

贴上一个链接,lua的知识很全
https://www.runoob.com/lua/lua-iterators.html

泛型for

--举例
tab={"java","C++","C","Lua"}
for key,value in ipairs(tab)
do 
 print(key,value)
end

首先,初始化,计算in后面的表达式的值(ipairs),表达式应该返回泛型for所需要的三个值:
1,迭代函数
2,状态常量
3,控制变量
如果表达式返回的结果个数不足三个,会自动调用nil补足。
第二、将状态常量和控制变量作为参数,调用迭代函数
第三、将迭代函数返回的值赋给变量列表
第四、如果返回的第一个值为nil,循环结束,否则继续执行循环体
第五、回到第二步,再次调用迭代函数

举例:手写一个符合for in要求的表达式:

function iparis1(tab)
  return ipairs1_iter,tab,0
end
--第一个是迭代函数,第二个是状态常量
function ipairs_iter(tab,i)
  i=i+1;
  if tab[i]~=nil then return i,t[i]
  end
end
--lua中不等于是~=而不是!=a

for k,v in ipairs1(tab) do
  print(k,v)
end

同样可以实现ipairs的功能。ipairs在迭代时,将返回三个参数,第一个是ipairs,第二个是传入的table,第三个是0。每次将table中的值赋值给k和v,在下一次循环中更新k和v的值,直到k和v为nil

你可能感兴趣的:(LUA)