Lua Coroutine 的简单使用

在Unity 中习惯了使用 Coroutine,发现 Lua中也有 Coroutine 可以使用,大喜。


Lua 中的 Coroutine 有四种状态 Suspend 、 Running  、Dead、 Normal 。


下面代码解释了各个状态的时机

------------------------
--get coroutine status--
------------------------

local co=coroutine.create(function(  )
	-- body
	print("hi")
end)

--coroutine type is thread
print(co,type(co))

--coroutine is on suspend status after create (suspend/running/dead/normal)
print(coroutine.status(co))

--coroutine is on running status after resume
local bret=coroutine.resume(co)

--注意resume操作是有返回值的!!! 这里返回true
print(bret)

--coroutine is on dead status running end
print(coroutine.status(co))

--对一个 已经是dead状态的coroutine进行resume是返回false的
local bret=coroutine.resume(co)
print(bret)

--而且直接在print中进行resume还能打印出来详细错误
print(coroutine.resume(co))


------------------
----test yield----
------------------
print("----test yield----")

co=coroutine.create(function (  )
	-- body
	for i=1,5 do
		print("co",i)

		--coroutine be suspend while call yield()
		coroutine.yield()

		print("co after yield",i)
	end
end)

print(coroutine.status(co))

coroutine.resume(co) --执行resume,coroutine继续执行状态running,输出1,然后yield 状态变为suspended
print(coroutine.status(co))

coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出2,然后yield 状态变为suspended
print(coroutine.status(co))

coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出3,然后yield 状态变为suspended
print(coroutine.status(co))

coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出4,然后yield 状态变为suspended
print(coroutine.status(co))

coroutine.resume(co)--执行resume,coroutine继续执行状态running,输出5,然后yield 状态变为suspended
print(coroutine.status(co))

coroutine.resume(co) --for循环了5次,5次循环之后状态是suspended,
					--这时候是suspended在yield(),所以要再一次resume,执行yield()后面的逻辑
print(coroutine.status(co))



print(coroutine.resume(co))




你可能感兴趣的:(Lua)