在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
--自己实现迭代器
function get_each_fun(array) local i=0 local length=table.getn(array); return function() i=i+1; return (i>length and nil) or array[i]; end end list={1,3,5,7,9} for item in get_each_fun(list) do print(item) end print '-----------------------------------------------------' for item in get_each_fun(list) do print(item) end
--自己实现迭代器 function get_each_fun(array) local i=0 local length=table.getn(array); return function() i=i+1; if i>length then return nil; else return i,array[i]; end end end list={1,3,5,7,9} for key,item in get_each_fun(list) do print(key,item) end print '-----------------------------------------------------' for key,item in get_each_fun(list) do print(key,item) end
范型for 的语义如下: 范性for的执行过程:
首先,初始化,计算in后面表达式的值,表达式应该返回范性for需要的三个值:迭代函数、状态常量、控制变量;与多值赋值一样,如果表达式返回的结果个数不足三个会自动用nil补足,多出部分会被忽略。
第二,将状态常量和控制变量作为参数调用迭代函数(注意:对于for结构来说,状态常量没有用处,仅仅在初始化时获取他的值并传递给迭代函数)。
第三,将迭代函数返回的值赋给变量列表。
第四,如果返回的第一个值为nil循环结束,否则执行循环体。
第五,回到第二步再次调用迭代函数。
更具体地说: for var_1, ..., var_n in explist do block end 等价于 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 语义实例:
function get_each_fun(array)
local i=0 local length=table.getn(array); return function(s,var) print(s,var) i=i+1; if i>length then return nil; else return i,array[i]; end end,99,101 end list={1,3,5,7,9} for key,item in get_each_fun(list) do end
|
请发表评论