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( 协程主函数参数, "参数")--