lua學習筆記 六

2021-08-22 04:43:21 字數 2172 閱讀 7521

--建立協程,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檔案。對於我來說,時而去改變環境變數,則顯得麻煩,並且在另外的環境中部署時還要修改環境變數,則顯得不人性化,因此,覺得如下方式增加搜尋路徑比較好 ...