Lua的自我学习之路-语法学习10

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asdfghj253/article/details/80742288

要点:协同函数

1.创建协同函数

--定义协同函数

co=coroutine.create(
  function (a,b)    --匿名函数 无需也无法定义方法名
     print(a+b)
  end
)
coroutine.resume(co,20,30) --启动协同函数

1.定义协同函数coroutine.create
2.启动协同函数coroutine.resume

2.定义协同函数,不同的是启动方式不同

co=coroutine.wrap(
  function (a,b)
     print(a+b)
  end
)
co(20,30)

3.暂停和继续协同函数

--暂停、继续协程
co=coroutine.create(
  function (a,b)
     print(a+b)
	 coroutine.yield()   --可以使此函数暂停
	 print(a-b)
  end
)
coroutine.resume(co,20,30)
print("OK!");
coroutine.resume(co)    --如要执行暂停后面的内容,可再执行协程,第二次启动可以不写参数

4.获取协同函数的执行状态

co=coroutine.create(
  function (a,b)
     print(a+b)
	 print(coroutine.running())           --输出running状态的协程 返回此协程线程的编号
	 print(coroutine.status(co))           --获取协程的运行状态  此时状态是running
	 print(a-b)
	 coroutine.yield(a+b);   --暂停时也可传递出参数
	 return a*b,a/b;
  end
)
print(coroutine.running())                 --输出running状态的协程
print(coroutine.status(co))                 --获取协程的运行状态  此时状态是 suspended 暂停状态 因为有暂停函数
res1,res2,res3=coroutine.resume(co,20,30) --协同函数的返回的第一个  永远是true/false
                                     --第二个开始  才是我们写的返回值
print(res1,res2,res3);               --执行到暂停函数 所以输出 true	50	nil

res1,res2,res3=coroutine.resume(co)

print(res1,res2,res3);               --执行到 再后面的内容   所以输出 true  600	0.66666666666667

print(coroutine.status(co))             --获取协程的运行状态  此时状态是 dead

猜你喜欢

转载自blog.csdn.net/asdfghj253/article/details/80742288