lua的协程是好东西,跟unity的协程还是不太一样,下面写了一个例子,直接上代码:
co=coroutine.create(function ()
-- body
print "hi coroutine";
end)
print(type(co));
print(coroutine.status(co));
coroutine.resume(co)
print(coroutine.status(co));
print "-------------------------------";
print "-------------------------------";
co1=coroutine.create(function ()
-- body
print "hi coroutine";
coroutine.yield();
print "yield end start";
end)
print(type(co1));
print(coroutine.status(co1));
coroutine.resume(co1)
print(coroutine.status(co1));
coroutine.resume(co1)
print(coroutine.status(co1));
print "-------------------------------";
print "-------------------------------";
co2=coroutine.create(function ()
for i=1,10 do
print("item",i)
coroutine.yield();
end
end)
print(type(co2));
print(coroutine.status(co2));
coroutine.resume(co2)
print(coroutine.status(co2));
print("main 1")
coroutine.resume(co2)
print(coroutine.status(co2));
print("main 2")
print "-------------------------------";
print "-------------------------------";
--lua中协程可以通过resume-yield来交换数据
--1.通过resume把参数传递给协同主程序
co3=coroutine.create(function (a,b)
-- body
print("co",a,b);
end)
print(coroutine.resume(co3,1,2))
print "-------------------------------";
print "-------------------------------";
--2.数据通过yield传递给resume,true表示传递成功,true之后的部分即是yield的参数
co4=coroutine.create(function (a,b)
-- body
coroutine.yield(a+b,a-b);
end)
print(coroutine.resume(co4,1,5))
--3.把resume的参数传递给yield
print "-------------------------------";
print "-------------------------------";
co5=coroutine.create(function ()
-- body
print("co5",coroutine.yield());
end)
coroutine.resume(co5);
coroutine.resume(co5,4,5);