一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Lua - Lua中的迭代器和泛型for介紹

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

2020-04-27 11:31腳本之家 Lua

這篇文章主要介紹了Lua中的迭代器和泛型for介紹,任何一種結(jié)構(gòu),只要允許你遍歷集合中所有元素的都可稱之為迭代器,本文就講解了Lua中迭代器的相關(guān)知識和代碼實例,并講解了泛型for的語法,需要的朋友可以參考下

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

例如,我們可以寫過簡單的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ù)。每次迭代時調(diào)用新的迭代函數(shù)。但迭代器返回nil循環(huán)結(jié)束。

 

上面的迭代器有個瑕疵:需要創(chuàng)建一個閉包。創(chuàng)建閉包是需要代價的,只是大部分情況下都沒問題,然而有些情況卻是不能容忍這個代價的。這時的解決方法是使用泛型for。泛型for本身保存迭代狀態(tài),包括迭代函數(shù),狀態(tài)常量,控制變量,因此不必付出閉包的代價,稱這種迭代器為無狀態(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.如果返回的第一個值為nil,則循環(huán)結(jié)束,否則執(zhí)行循環(huán)體。
5.回到第2步。

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

延伸 · 閱讀

精彩推薦
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結(jié)合代碼實例詳細(xì)講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua實現(xiàn)__add方法重載示例

    Lua實現(xiàn)__add方法重載示例

    這篇文章主要介紹了Lua實現(xiàn)__add方法重載示例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • Lua深入探究Lua中的解析表達(dá)式

    深入探究Lua中的解析表達(dá)式

    這篇文章主要介紹了深入探究Lua中的解析表達(dá)式,對于其語法部分的說明和示例都超詳細(xì),極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內(nèi)容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過table給另一個table賦值等內(nèi)容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實現(xiàn),需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • LuaLua教程(二):基礎(chǔ)知識、類型與值介紹

    Lua教程(二):基礎(chǔ)知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎(chǔ)知識、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內(nèi)容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
主站蜘蛛池模板: 亚州vs欧州vs日 | melody中文字幕 | 外国老少性配 | 成人精品第一区二区三区 | 欧美成a人片免费看久久 | 免费一级欧美大片在线观看 | 亚洲欧美综合区自拍另类 | 日韩在线第一区 | 32d乳白色的奶罩未删除 | 亚洲国产天堂在线观看 | 国产尤物精品视频 | 亚洲99久久无色码中文字幕 | 精品精品国产自在久久高清 | 门房秦大爷小说 | 纲手被comic天堂 | a毛片久久免费观看 | 精品免费视在线视频观看 | 精品老司机在线视频香蕉 | 欧美精品黑人巨大在线播放 | 人妖欧美一区二区三区四区 | 国产麻豆91网在线看 | 女教师巨大乳孔中文字幕免费 | 美女任你摸 | ai换脸杨颖啪啪免费网站 | 成人au免费视频影院 | 日本b站一卡二不卡三卡四卡 | 99综合网| 美女脱了内裤打开腿让人羞羞软件 | 俄罗斯13一14处出血视频在线 | 欧美日韩一区二区三区在线播放 | 九九九九九热 | 午夜AV内射一区二区三区红桃视 | 国产亚洲成归v人片在线观看 | 亚洲精品国产在线 | 欧美国产在线观看 | 亚洲精品高清中文字幕完整版 | 扒开腿开嫩苞 | 女人肮脏的交易中文字幕未删减版 | 精品国产福利片在线观看 | 男人的j伸到女人的屁股眼 男人吃奶动态图 | h在线动漫|