lua 协程的简单理解

本文介绍了Lua中协程的基本概念,包括`coroutine.create`用于创建协程,`coroutine.yield`使得协程挂起,以及`coroutine.resume`用于唤醒并执行协程。通过示例解释了如何使用这些函数,并阐述了`coroutine.resume`传入参数与`coroutine.yield`返回值之间的对应关系。
摘要由CSDN通过智能技术生成

lua 协程的简单理解

 coroutine.create  创建一个协程主函数.

 coroutine.yield 使协程主函数暂时挂起来

 coroutine.resume 唤醒协程主函数,调用协程主函数中的逻辑

    例如

   local func = coroutine.create( function(...)print("123")end)

   coroutine.resume(func)

 那么这个时候 第一次运行协程函数.

  将打印123 

    继续看 

    local func = coroutine.create(function(...)print("123")

                            coroutine.yield()

                            print("456")

            end)

    那么函数在执行到  coroutine.yield()的时候,

    函数将挂起来了.

    此时print(“456”)显示不出来

    这个时候必须再次将协程主函数唤醒 

    调用 

     coroutine.resume(func) 

     

      

    示例:

    local func = coroutine.create(function(...)

            print("123") 

            coroutine.yield()

            print("456") )

    end 

    coroutine.resume(func)

    coroutine.resume(func)

     那么就能看见

       123

       456 了


  

 再来看 

  coroutine.resume()函数  第二次调用的时候传的参数等于

    coroutine.yield()函数的返回值

代码如下:

local func = coroutine.creat(function(...)

                    print("123")

                    coroutine.yield()

end)

    第一次调用 

    coroutine.resume(func) 函数 

   那么将打印123, 

    同时返回 coroutine.yield()函数中的 参数 和协程主函数的运行状态

   print(coroutine.resume(func) ), 打印出来为true.


第二次调用coroutine.resume(func , 2) 函数时,

这个时候 我们修改下 

    coroutine.yield() ==>   local number = coroutine.yield() 函数

    那么我们打印下print(number) ,那么 number = 2 ,


第二次调用resume函数时,会将除func协程主函数之外的参数 传给yield函数,作为 第一个yield函数的返回值.


那么要理解两个函数的用法. 

   一个yield函数 传参,那么对应的resume函数 就会返回这个yield函数的参数

    第二次调用resume函数 ,并传除协程主函数参数之外的参数, 那么 第一个yield函数就会返回 第二个resume函数中的参数


 对应关系 如下:

coroutine1.resume() 函数的返回值    =   coroutine1.yield("参数")   --         一 一 对应的关系

coroutine1.yield()函数的返回值 = coroutine2.resume( 协程主函数参数, "参数")--                  


    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值