迭代和协程

来源:互联网 发布:万网注册域名流程 编辑:程序博客网 时间:2024/05/01 23:54

这里写图片描述

3.迭代

function enum(array)   local index=1   return function()              local  ret=array[index]                index=index+1                return ret             end end--遍历function foreach(array,action)    for element in enum(array )  do       action(element)     endend--指定action为打印foreach({1,2,3},print)

运行结果:

这里写图片描述

4.协程(生产者和消费者的问题)

--producerfunction  producer()  return coroutine.create(   function(salt)   local t={1,2,3}    for i=1,#t do        salt=coroutine.yield(t[i]+salt)       end     end)end --consumer  参数为生产者生产的结果function consumer(prod)  local salt=10  while true do    local running,producer=coroutine.resume(prod,salt)              salt=salt*salt    if running then         print(producer or "end")             else                break            end  endendconsumer(producer())

运行结果:
这里写图片描述
在做完t[i]+salt之前,协程还处于running的状态,而后直接挂起,producer的值为11;
第二次yield之前,salt的值已经变为100,加上t[2],为102,以此类推

原创粉丝点击