主頁 > 知識(shí)庫 > Lua中的迭代器和泛型for介紹

Lua中的迭代器和泛型for介紹

熱門標(biāo)簽:清朝地圖標(biāo)注哈爾濱 百度地圖標(biāo)注早餐區(qū)域 地圖標(biāo)注大廈 漳州智云呼電話機(jī)器人 個(gè)人怎么在地圖標(biāo)注需要的店鋪 冀州市地圖標(biāo)注 怎么去除地圖標(biāo)注 武漢外呼防封系統(tǒng)多少錢 新岸線智能電銷機(jī)器人

任何一種結(jié)構(gòu),只要允許你遍歷集合中所有元素的都可稱之為迭代器。lua中常常使用函數(shù)來描述迭代器,每次調(diào)用該函數(shù)都返回集合的下一個(gè)元素。每一個(gè)迭代器都需要保存一些狀態(tài)來知道當(dāng)前處于什么位置和如何進(jìn)行下一次迭代。對(duì)于這樣的任務(wù),閉包提供了很好的機(jī)制來完成。一個(gè)典型的閉包結(jié)構(gòu)包含兩個(gè)函數(shù):一個(gè)是閉包自身,一個(gè)是創(chuàng)建閉包的工廠。

例如,我們可以寫過簡(jiǎn)單的list迭代器,讓他僅僅返回值。

復(fù)制代碼 代碼如下:

function values( t )
     local i = 0;
     return function() i = i + 1;return t[i] end
end

tb = {33, 44, 55}

for v in values(tb) do
     print(v)
end


泛型for簿記所有迭代循環(huán),首先調(diào)用迭代工廠,并內(nèi)部保存迭代函數(shù)。每次迭代時(shí)調(diào)用新的迭代函數(shù)。但迭代器返回nil循環(huán)結(jié)束。

上面的迭代器有個(gè)瑕疵:需要?jiǎng)?chuàng)建一個(gè)閉包。創(chuàng)建閉包是需要代價(jià)的,只是大部分情況下都沒問題,然而有些情況卻是不能容忍這個(gè)代價(jià)的。這時(shí)的解決方法是使用泛型for。泛型for本身保存迭代狀態(tài),包括迭代函數(shù),狀態(tài)常量,控制變量,因此不必付出閉包的代價(jià),稱這種迭代器為無狀態(tài)迭代器。

泛型for的語法:

復(fù)制代碼 代碼如下:

for var-list> in exp-list> do
     body>
end

執(zhí)行過程:

1.初始化迭代函數(shù),狀態(tài)常量,控制變量,不足補(bǔ)nil,多出忽略。
2.狀態(tài)常量,控制變量作為參數(shù)調(diào)用迭代函數(shù)。
3.將迭代函數(shù)返回的值付給變量列表。
4.如果返回的第一個(gè)值為nil,則循環(huán)結(jié)束,否則執(zhí)行循環(huán)體。
5.回到第2步。

如果遇到需要保存多個(gè)狀態(tài),還有種方法是將所有狀態(tài)封裝到表中。實(shí)際上,我們不推薦這么寫。因?yàn)閯?chuàng)建閉包的代價(jià)比創(chuàng)建表的要小,而且lua處理閉包的速度更快些。還有更強(qiáng)大更復(fù)雜的方式是使用協(xié)同來創(chuàng)建迭代器。

您可能感興趣的文章:
  • 深入解讀Lua中迭代器與泛型for的使用
  • 淺析Lua中的迭代器
  • Lua教程(五):迭代器和泛型for
  • Lua中的迭代器和泛型for學(xué)習(xí)總結(jié)
  • Lua中的迭代器和泛型for實(shí)例
  • Lua中的迭代器(iterator)淺析
  • Lua的迭代器使用中應(yīng)該避免的問題和技巧
  • Lua中的for循環(huán)和迭代器的秘密探究
  • Lua中的迭代器淺析
  • Lua基礎(chǔ)迭代器的使用實(shí)例

標(biāo)簽:宣城 臺(tái)灣 天門 天門 德宏 金昌 儋州 濰坊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的迭代器和泛型for介紹》,本文關(guān)鍵詞  Lua,中的,迭代,器,和,泛型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua中的迭代器和泛型for介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua中的迭代器和泛型for介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章