婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Lua中的迭代器淺析

Lua中的迭代器淺析

熱門標(biāo)簽:百度地圖標(biāo)注位置網(wǎng)站 上海企業(yè)外呼系統(tǒng)排名 如何利用高德地圖標(biāo)注家 揚(yáng)州電銷外呼系統(tǒng)軟件 武漢百應(yīng)人工智能電銷機(jī)器人 智能語音電銷的機(jī)器人 400手機(jī)電話免費(fèi)辦理 開通400電話申請(qǐng)流程 電腦外呼系統(tǒng)輻射大嗎

今天學(xué)習(xí)的內(nèi)容還蠻有意思的,讓我興奮了一下~

1.迭代器

什么是迭代器?別傻了,我最討厭的就是名詞解釋了,反正就是用來遍歷集合的一種方式。
比如,我們最常用的pairs,如下代碼:

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

    local t = {"fdsd", "445"};
  
    for k, v in pairs(t) do
        print("k=" .. k .. ", v=" .. v);
    end

 
這是一次遍歷table的操作,然后打印出table的key值和value值。
輸出結(jié)果如下:
復(fù)制代碼 代碼如下:

[LUA-print] k=1, v=fdsd
[LUA-print] k=2, v=445

2.自己寫一個(gè)迭代器

要想了解迭代器,那還是要自己寫一個(gè)才行,迭代器沒有什么神奇的地方,它很簡(jiǎn)單。如這樣一個(gè)函數(shù):

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

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

這函數(shù)故名思議,叫做迭代器,英文不好的也沒關(guān)系,知道是這意思就好了,呵呵(小若:英文你個(gè)頭??!分明是拼音啊?。?br />  
有沒有發(fā)現(xiàn)這dieDaiQi函數(shù)有點(diǎn)特別?沒錯(cuò),它就是之前的文章提到過的“閉合函數(shù)”,正是利用了閉合函數(shù)的特性來實(shí)現(xiàn)迭代功能的。
來看看如何使用這個(gè)迭代器吧:

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

    local iter = dieDaiQi(t);
    while true do
        local value = iter();
        if value == nil then
            break;
        end
      
        print(value);
    end

因?yàn)槊恳淮握{(diào)用dieDaiQi函數(shù),就會(huì)產(chǎn)生一個(gè)新的閉合函數(shù),所以我們要用一個(gè)iter變量保存這個(gè)閉合函數(shù),避免重復(fù)創(chuàng)建。

如果你對(duì)閉合函數(shù)已經(jīng)很生疏了,可以看看我之前的這篇文章:【笨木頭Lua專欄】基礎(chǔ)補(bǔ)充03:閉合函數(shù)、非全局函數(shù)與函數(shù)的尾調(diào)用

接著,只要循環(huán)調(diào)用iter閉合函數(shù)即可,因?yàn)殚]合函數(shù)的特點(diǎn),i變量是會(huì)一直增加的,所以每次調(diào)用iter函數(shù),返回的都是下一個(gè)table元素。
最終輸出結(jié)果如下:

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

[LUA-print] fdsd
[LUA-print] 445

3.更簡(jiǎn)潔的迭代器調(diào)用

剛剛調(diào)用迭代器的方式也太粗暴了,這么長(zhǎng)一片代碼,不太合理。
所以,我們又有了偷懶的方式——使用for循環(huán)調(diào)用迭代器。
 
直接看代碼,剛剛的迭代器可以這么調(diào)用:

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

    local t = {"fdsd", "445"};
    for value in dieDaiQi(t) do
        print(value);
    end

 
這里大家可能會(huì)有一個(gè)疑問,每一次的循環(huán),都會(huì)調(diào)用一次dieDaiQi函數(shù),那不就會(huì)產(chǎn)生很多個(gè)閉合函數(shù)?那i的值不就每次都是0?

答案是:不會(huì)的。

因?yàn)閒or循環(huán)只會(huì)調(diào)用一次dieDaiQi函數(shù),然后把它的返回值保存起來。

4.結(jié)束

這篇的介紹似乎是異常地簡(jiǎn)短,其實(shí)不是的,還有下篇,因?yàn)槲遗陆酉聛硪f的東西比較多,導(dǎo)致文章太長(zhǎng)。

所以,還是分開來介紹吧,下一篇,我們來深入了解一下為什么for循環(huán)可以這么方便地處理迭代器。

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

標(biāo)簽:張掖 宜賓 延邊 黑龍江 武漢 江西 嘉峪關(guān) 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的迭代器淺析》,本文關(guān)鍵詞  Lua,中的,迭代,器,淺析,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中的迭代器淺析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Lua中的迭代器淺析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 日土县| 岳普湖县| 青川县| 昌都县| 宁强县| 榆社县| 怀安县| 辽阳市| 苏尼特左旗| 亚东县| 晴隆县| 衡南县| 堆龙德庆县| 喀喇| 荥经县| 太和县| 镇江市| 大埔县| 乐陵市| 宜兴市| 高台县| 孝义市| 重庆市| 涞水县| 忻城县| 平果县| 江安县| 塘沽区| 巴彦淖尔市| 昌黎县| 宣威市| 旌德县| 容城县| 台北市| 鹤壁市| 西畴县| 阳西县| 龙井市| 保康县| 晋江市| 陆河县|