W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
1.1 實(shí)例代碼:
--迭代
local function enum(array)
local index = 1
return function()
local ret = array[index]
index = index + 1
return ret
end
end
local function foreach(array,action)
for element in enum(array)do
action(element)
end
end
foreach({1,2,3},print)
輸出結(jié)果:
1
2
3
1.2 有關(guān)迭代的描述:
迭代是for語(yǔ)句的一種特殊形式,可以通過(guò)for語(yǔ)句驅(qū)動(dòng)迭代函數(shù)對(duì)一個(gè)給定集合進(jìn)行遍歷。正式、完備的語(yǔ)法說(shuō)明較復(fù)雜,請(qǐng)參考Lua手冊(cè)。
如前面代碼所示:enum函數(shù)返回一個(gè)匿名的迭代函數(shù),for語(yǔ)句每次調(diào)用該迭代函數(shù)都得到一個(gè)值(通過(guò)element變量引用),若該值為nil,則for循環(huán)結(jié)束。
2.1 實(shí)例代碼
--線程
local function producer()
return coroutine.create(
function(salt)
local t = {1,2,3}
for i = 1,#t do
salt = coroutine.yield(t[i] + salt)
end
end
)
end
function consumer(prod)
local salt = 10
while true do
local running ,product = coroutine.resume(prod, salt)
salt = salt*salt
if running then
print(product or "END!")
else
break
end
end
end
consumer(producer())
輸出結(jié)果:
11
102
10003
END!
2.2 有關(guān)協(xié)作線程的描述:
通過(guò)coroutine.create可以創(chuàng)建一個(gè)協(xié)作線程,該函數(shù)接收一個(gè)函數(shù)類型的參數(shù)作為線程的執(zhí)行體,返回一個(gè)線程對(duì)象。
通過(guò)coroutine.resume可以啟動(dòng)一個(gè)線程或者繼續(xù)一個(gè)掛起的線程。該函數(shù)接收一個(gè)線程對(duì)象以及其他需要傳遞給該線程的參數(shù)。線程可以通過(guò)線程函數(shù)的參數(shù)或者coroutine.yield調(diào)用的返回值來(lái)獲取這些參數(shù)。當(dāng)線程初次執(zhí)行時(shí),resume傳遞的參數(shù)通過(guò)線程函數(shù)的參數(shù)傳遞給線程,線程從線程函數(shù)開(kāi)始執(zhí)行;當(dāng)線程由掛起轉(zhuǎn)為執(zhí)行時(shí),resume傳遞的參數(shù)以yield調(diào)用返回值的形式傳遞給線程,線程從yield調(diào)用后繼續(xù)執(zhí)行
線程放棄調(diào)度
線程調(diào)用coroutine.yield暫停自己的執(zhí)行,并把執(zhí)行權(quán)返回給啟動(dòng)/繼續(xù)它的線程;線程還可利用yield返回一些值給后者,這些值以resume調(diào)用的返回值的形式返回。
lua 論壇(lua 中國(guó)開(kāi)發(fā)者 luaer中國(guó)官司方網(wǎng)站)
Lua參考手冊(cè)(最正式、權(quán)威的Lua文檔)
Lua編程(在線版,同樣具權(quán)威性的Lua教科書)
Lua正式網(wǎng)站的文檔頁(yè)面(包含很多有價(jià)值的文檔資料鏈接)
Lua維基(最全面的Lua維基百科)
LuaForge(最豐富的Lua開(kāi)源代碼基地)
參考文獻(xiàn)《C/C++程序員的Lua快速入門》
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: