Lua 迭代器

来源:互联网 发布:蒙古音乐软件ehshig 编辑:程序博客网 时间:2024/06/06 00:37

范性for的执行过程:

  • 首先,初始化,计算in后面表达式的值,表达式应该返回范性for需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用nil补足,多出部分会被忽略。
  • 第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于for结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
  • 第三,将迭代函数返回的值赋给变量列表。
  • 第四,如果返回的第一个值为nil循环结束,否则执行循环体。
  • 第五,回到第二步再次调用迭代函数

function ctrl(maxNum,currentNum)

  if( currentNum<maxNum) then
    currentNum=currentNum+1;
    return currentNum,currentNum*currentNum;
  end
end;
for k,v in ctrl,3,0 do
  print(k,v);
end 



实现 ipairs 方法

function iter(a,i)
  i=i+1;
  local v=a[i];
  if(v) then
    return i,v;
   end
end
function ipairss(a)
  return iter,a,0;
tbl={"a","b","v"}
end
for k,v in ipairss(tbl) do
  print(k,v);
end 
原创粉丝点击