--建立協程,coroutine表中名為create的函式建立協程,返回值為thread型別
co = coroutine.create(function () print("hello") end)
print(co)
--檢視協程狀態 suspended running dead normal四種狀態
print(coroutine.status(co))
--喚醒協程
coroutine.resume(co)
print(coroutine.status(co))
--coroutine.yield()掛起協程
co = coroutine.create(function() for i = 1,10 do print("co",i) coroutine.yield() end end)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
print(coroutine.status(co))
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
coroutine.resume(co)
--似乎最大次掛起不會使得協程直接進入死亡狀態,需要再喚醒一次才會使得協程進入死亡狀態
print(coroutine.status(co))
--試圖喚醒死亡的協程 好像什麼也沒發生
coroutine.resume(co)
print(coroutine.status(co))
--協同程式coroutine.resume()會列印啥
--無yield時 協程主函式列印啥喚醒時就會列印啥
co = coroutine.create(function (a,b,c)
print("co",a,b,c)
end)
coroutine.resume(co,1,2,3)
--有yield時
co = coroutine.create(function(a,b)
coroutine.yield(a+b,a-b)
end)
--列印喚醒函式會直接列印是否有錯誤和yield傳入的引數
print(coroutine.resume(co,20,10))
--協程直接有返回值時
co = coroutine.create(function()
return 6,7
end)
print(coroutine.resume(co))
--pipe管道filter過濾器
--接收產品
function receive(pro)
local status,value = coroutine.resume(pro)
return value
end--傳送產品
function send(x)
coroutine.yield(x)
end--生產者
function producer()
return coroutine.create(function()
while true do
local x = io.read()
send(x)
endend)
end--消費者
function consumer(pro)
while true do
local x = receive(pro)
print(x)
endend
--過濾器
function filter(pro)
return coroutine.create(function()
for line = 1,math.huge do
local x = receive(pro)
x = string.format("%5d%s",line,x)
send(x)
endend)
end--生產並消費
consumer(filter(producer()))
Lua學習筆記(六)
元類 people 此處定義的元素都是相當於c 的靜態成員變數 基類方法new function people new o,n,a o o or setmetatable o,self self相當於c 的this指標,但是這裡指代的是元類people而不是物件o self.index self o...
Lua學習筆記六 package
lua和其他語言一樣,也有模組 包的概念,稍微有點不同的是,預設先從環境變數lua path中搜尋lua檔案,如果搜尋不到,則從lua cpath中搜尋c檔案。對於我來說,時而去改變環境變數,則顯得麻煩,並且在另外的環境中部署時還要修改環境變數,則顯得不人性化,因此,覺得如下方式增加搜尋路徑比較好 ...
Lua學習筆記六 package
lua和其他語言一樣,也有模組 包的概念,稍微有點不同的是,預設先從環境變數lua path中搜尋lua檔案,如果搜尋不到,則從lua cpath中搜尋c檔案。對於我來說,時而去改變環境變數,則顯得麻煩,並且在另外的環境中部署時還要修改環境變數,則顯得不人性化,因此,覺得如下方式增加搜尋路徑比較好 ...