以遍历一个列表中的元素为例, 总共有以下几种方法: 1.使用协同 function it(a) local i = 1 local n = table.getn(a) for index =i,n do --print(" index = ", index) coroutine.yield(a[index]) end end function sqf_list(a) co = coroutine.create( function () it(a) end ) return function () local status, value = coroutine.resume(co) --print( "status, value :", status, value ) return value end end t = {1, 2, 5, 8, 10} for val in sqf_list(t) do print(val) end 以上代码等价于 function it(a) local i = 1 local n = table.getn(a) for index =i,n do --print(" index = ", index) coroutine.yield(a[index]) end end function sqf_list(a) return coroutine.wrap( function () it(a) end ); end t = {1, 2, 5, 8, 10} for val in sqf_list(t) do print(val) end 2.使用闭包 function it (a) local i = 0 return function () i = i + 1 return a[i] end end local func t = {1, 2, 5, 8, 10} local func = it(t) while true do local val = func() if val == nil then break else print(val) end end 3.使用for循环 --tbl做为状态变量,control做为控制变量, it为迭代函数 function it (tbl, control ) local i = control local n = table.getn(tbl) i = i + 1 if i <= n then return i, tbl[i] end end function sqf_list (tbl) return it, tbl, 0 end t = {1, 2, 5, 8, 10} for index, val in sqf_list(t) do print(val) end