今天學(xué)習(xí)的內(nèi)容還蠻有意思的,讓我興奮了一下~
1.迭代器
什么是迭代器?別傻了,我最討厭的就是名詞解釋了,反正就是用來遍歷集合的一種方式。
比如,我們最常用的pairs,如下代碼:
2.自己寫一個迭代器
要想了解迭代器,那還是要自己寫一個才行,迭代器沒有什么神奇的地方,它很簡單。如這樣一個函數(shù):
這函數(shù)故名思議,叫做迭代器,英文不好的也沒關(guān)系,知道是這意思就好了,呵呵(小若:英文你個頭?。》置魇瞧匆舭。。?br />
有沒有發(fā)現(xiàn)這dieDaiQi函數(shù)有點(diǎn)特別?沒錯,它就是之前的文章提到過的“閉合函數(shù)”,正是利用了閉合函數(shù)的特性來實(shí)現(xiàn)迭代功能的。
來看看如何使用這個迭代器吧:
因?yàn)槊恳淮握{(diào)用dieDaiQi函數(shù),就會產(chǎn)生一個新的閉合函數(shù),所以我們要用一個iter變量保存這個閉合函數(shù),避免重復(fù)創(chuàng)建。
如果你對閉合函數(shù)已經(jīng)很生疏了,可以看看我之前的這篇文章:【笨木頭Lua專欄】基礎(chǔ)補(bǔ)充03:閉合函數(shù)、非全局函數(shù)與函數(shù)的尾調(diào)用
接著,只要循環(huán)調(diào)用iter閉合函數(shù)即可,因?yàn)殚]合函數(shù)的特點(diǎn),i變量是會一直增加的,所以每次調(diào)用iter函數(shù),返回的都是下一個table元素。
最終輸出結(jié)果如下:
3.更簡潔的迭代器調(diào)用
剛剛調(diào)用迭代器的方式也太粗暴了,這么長一片代碼,不太合理。
所以,我們又有了偷懶的方式——使用for循環(huán)調(diào)用迭代器。
直接看代碼,剛剛的迭代器可以這么調(diào)用:
答案是:不會的。
因?yàn)閒or循環(huán)只會調(diào)用一次dieDaiQi函數(shù),然后把它的返回值保存起來。
4.結(jié)束
這篇的介紹似乎是異常地簡短,其實(shí)不是的,還有下篇,因?yàn)槲遗陆酉聛硪f的東西比較多,導(dǎo)致文章太長。
所以,還是分開來介紹吧,下一篇,我們來深入了解一下為什么for循環(huán)可以這么方便地處理迭代器。
標(biāo)簽:張掖 宜賓 延邊 黑龍江 武漢 江西 嘉峪關(guān) 新余
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的迭代器淺析》,本文關(guān)鍵詞 Lua,中的,迭代,器,淺析,Lua,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。