omori-Sakuya

学迭代器遇到的一个问题

事情是这样的

复制代码
 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,并且两个返回值互换位置

一个无状态迭代器就完成了
 
 

posted on   omori_Sakuya  阅读(9)  评论(0编辑  收藏  举报

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示