lua協程中法wrap和create方法的區別
阿新 • • 發佈:2019-02-12
coroutine.create(f):用函式 f 建立一個協程,返回 thread 型別物件。
coroutine.wrap(f):與前面 coroutine.create 一樣,coroutine.wrap 函式也建立一個協程,與前者返回協程本身不同,後者返回一個函式。當呼叫該函式時,重新執行協程。
co01=coroutine.create(function(a) return 2*a end)
a,b=coroutine.resume(co01,20)
print(a,b)
co02=coroutine.wrap(function(a) return 2*a end)
c=co02(20)
print (c)
print("==========分割線===========")
co = coroutine.wrap(function(a)
local c = coroutine.yield(a+1)
print("main func a: ",a)
return 2*a
end)
b = co(20)
print(b) -- 21
--從yield後面執行
d = co(b+1)
print(d) -- 40
print("==========分割線===========")
co = coroutine.create(function(a) local c = coroutine.yield(a+1 ) print("main func c: ",c) return 2*a end)
b,v = coroutine.resume(co,20)
print(b,v) -- true,21
b,v = coroutine.resume(co,20)
print(b,v) -- true,40