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 2023-07-04 21:19  omori_Sakuya  阅读(7)  评论(0编辑  收藏  举报

导航