事情是这样的
function iter (arr,index) index = index + 1 if arr[index] then return arr[index],index end end a={1,2,3,5,4} for k,v in iter,{1,2,5,6,5,4},0 do print(k) end
运行结果:寄
将手打的table改成a得到的结果
1
2
3
5
—————————————第一个问题:直接传表是否可行?——————————————
通过实践
function a (b) for i = 1 ,#b do print(b[i]) end end arr={1,2,3,4,5,6} a(arr) a({1,2,3,4,5,6})
两次调用函数都能得到正确的结果
并不是传参数用的形式的问题
————————————第二个问题:表的数据问题,还是迭代器的问题?———————————
for k,v in iter,{1,2,3,5,4} ,0 do print(k) end for k,v in iter,{1,2,5,6,5,4},0 do print(k) end
分别用两组数据
第一个可以正常运行,而第二个不行
我们测试更多的数据,并存在变量 a 上
a={1,2,3,4,5,6} --正常
a={0,1,2,3,4,5,6} --寄
更离谱的是
a={1,2,3,5,5,6} 的结果为
1
2
3
5
6
数据没有改变问题出在迭代器身上
注意到这样一行代码
then return arr[index],index
最终得出结论,问题在迭代器上
function iter (arr,index)
return返回的两个值,第一个返回值用作下一次迭代时的第二个参数,并且这两个返回值分别赋值给k,v,第一个返回值用了两次
把print后的k改成v,并且两个返回值互换位置
一个无状态迭代器就完成了
标签:index,arr,end,迭代,遇到,iter,问题,print From: https://www.cnblogs.com/omori-Sakuya/p/17527054.html