欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Lua中pairs與ipairs的區(qū)別總結(jié)

Lua中pairs與ipairs的區(qū)別總結(jié)

熱門標簽:免費門店地圖標注注冊入駐 電話機器人每天搜索多少次 昆明電話外呼系統(tǒng)好么 衡水外呼線路解決 陜西便宜電銷機器人軟件 杞縣地圖標注app 外呼系統(tǒng)一天耗費多少流量 艾比利外呼系統(tǒng) 海口智能語音電銷機器人好用嗎

前言

最近在用 nginx_lua_module 模塊寫一個流量轉(zhuǎn)發(fā)的東西,根據(jù) Header, Body, Cookie 按照流量比例轉(zhuǎn)發(fā)到另一個地方。看了前人寫的代碼,里面循環(huán)的時候有的用 pairs ,有的用 ipairs ,很不解。好在 Lua 官網(wǎng)就有電子版的《 Programming in Lua 》,學習非常方便。以下內(nèi)容是我初學 Lua 的筆記和思考,如果不正確,歡迎指正。

標準庫提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代數(shù)組元素的(ipairs),迭代字符串中單詞的(string.gmatch)等等

pairs與ipairs區(qū)別

一般的迭代器是在內(nèi)部維護一個狀態(tài)的(當前迭代的位置),但是 Lua 的迭代器是 Stateless(無狀態(tài)的),這樣的好處是可以重復多次迭代。不像 Python 的 Iterator 和 Iterable,如果多次迭代的話,需要從 Iterable 獲得一個迭代器 Iterator。Lua 的迭代器需要循環(huán)的時候自己維護。

每一次迭代,for 都會調(diào)用迭代器函數(shù),傳入的參數(shù)有 2 個,一個是無狀態(tài)的、要迭代的對象,一個就是控制參數(shù)(迭代的狀態(tài),1 2 3 …)。

比如下面這個循環(huán):

a = {"one", "two", "three"}
for i, v in ipairs(a) do
 print(i, v)
end

首先 ipairs(a) 執(zhí)行,返回三個值: iter 函數(shù)(從這里看出 Lua 和 Python 一樣是有 “一等函數(shù)” 的),迭代的對象 a ,和迭代開始的下標 0 。然后第一次 for 循環(huán)調(diào)用 iter(a, 0) (參數(shù)如我們上面所說),得到返回值當前下標 i 和 a[i] 的值 v ,將這兩個值賦值給 for 循環(huán)定義時候的變量 i 和 v 。用 Lua 實現(xiàn)這個邏輯,如下:

function iter (a, i)
 i = i + 1
 local v = a[i]
 if v then
  return i, v
 end
end
 
function ipairs (a)
 return iter, a, 0
end

那么上面的 for 循環(huán)調(diào)用的邏輯類似下面這樣,首先調(diào)用 ipairs 函數(shù)得到 iter 函數(shù),然后每次調(diào)用 iter 函數(shù)。

iter_function, stateless, index = ipairs(a)
iter_function(stateless, index)
1  one
iter_function(stateless, index+1)
2  two
iter_function(stateless, index+2)
3  three

另外一個要注意的點是,上面的 Lua 代碼判斷了 v ,如果不為 nil 才繼續(xù)。而實際的 for 循環(huán)中也是這樣的。比如我們下面這個循環(huán),因為第二個值是 nil ,所以打印只會出現(xiàn)第一個元素。

a = {"one", nil, "three"}
for i, k in ipairs(a) do
 print(i, k)
end
1  one

然后我們在來說說 pairs 。其實從上面的描述中也可以發(fā)現(xiàn), ipars 是從 1 開始取值到 nil 截止,那么如果 table 中如果有 nil 但是又想取出所有的元素,就很不方便了。這個時候就可以用 pairs 。

function pairs (t)
 return next, t, nil
end

for 循環(huán)的邏輯在上面已經(jīng)說了, pairs 在這里的不同是,它返回的三個元素是 next 函數(shù),迭代的對象 a ,開始的狀態(tài) nil 。可以看到不同點主要有兩個:第一個是函數(shù) next ,它和 iter 的不同是,它返回的是下一個 key value ,并且順序固定,直到?jīng)]有任何 key value 對了,迭代結(jié)束。

我們可以通過幾個例子看它們的區(qū)別。

a = {"one", "two", "three"}
for i, v in ipairs(a) do
 print(i, v)
end
for i, v in pairs(a) do
 print(i, v)
end

打印值如下:

1       one
2       two
3       three
1       one
2       two
3       three

兩個結(jié)果一樣,因為在這個 table 中 key 都是 1 2 3 ,所以 pair 用 iter 循環(huán)(下標從 1 開始到第一個不是 nil 的值),還是 ipairs 用 next 循環(huán)(下標從 nil 開始遍歷所有的 key value ),效果都是一樣的。

t = {
 a = "apple",
 b = "baby",
 c = "cool"
}
for i, v in ipairs(t) do
 print(i, v)
end
for k, v in pairs(t) do
 print(k, v)
end

結(jié)果是 pairs 可以打印出來結(jié)果, ipairs 打印的結(jié)果為空。因為 t[1] 的值是 nil ,所以 ipairs 循環(huán)剛開始就停止了。

再來看最后一組例子(從參考資料1抄來的):

ocal t = {
 a=100,10,20,[5]=30
}
 
for key,value in ipairs(t) do
 print(key,value) 
 --1 10
 --2 20
end
 
for key,value in pairs(t) do
 print(key,value) 
 --1 10
 --2 20
 --a 100
 --5 30
end

結(jié)果如注釋中所示,就不必解釋了吧。

了解了它們的區(qū)別,用起來就非常簡單了。 ipairs 一般用于需要下標、迭代 array 形式的 table; pairs 可以用來迭代字典形式的 table 。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考資料:

  • table 使用手冊
  • 《 Programming in lua 》
您可能感興趣的文章:
  • Lua 中 pairs 和 ipairs 的區(qū)別

標簽:臨滄 海口 昌都 宿遷 泰安 西寧 營口 南京

巨人網(wǎng)絡通訊聲明:本文標題《Lua中pairs與ipairs的區(qū)別總結(jié)》,本文關鍵詞  Lua,中,pairs,與,ipairs,的,區(qū)別,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中pairs與ipairs的區(qū)別總結(jié)》相關的同類信息!
  • 本頁收集關于Lua中pairs與ipairs的區(qū)別總結(jié)的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲免费av观看| 精品手机在线视频| 任你操精品视频| 欧美福利一区二区| 国产精品私人影院| 美女网站色91| jjzz黄色片| 欧美又粗又大又长| 久久丝袜美腿综合| 婷婷开心激情综合| 94-欧美-setu| 侵犯稚嫩小箩莉h文系列小说| 欧美大白屁股肥臀xxxxxx| 亚洲专区一二三| 成人精品国产一区二区4080| 日韩影视一区二区三区| 日韩一区二区三区四区五区六区| 亚洲激情自拍视频| 成人午夜电影网站| 色8久久精品久久久久久蜜 | 国产suv精品一区二区883| 中文人妻一区二区三区| 欧美日韩成人激情| 亚洲综合在线观看视频| 99久久婷婷国产综合精品| 国产馆在线观看| 国产精品不卡视频| 国产91在线观看丝袜| 色综合天天综合狠狠| 国产精品素人一区二区| 99精品久久只有精品| 欧美高清视频在线高清观看mv色露露十八| 亚洲大片一区二区三区| 少妇献身老头系列| 欧美视频一区二区在线观看| 亚洲精品视频免费观看| 久久免费精品国产| 欧美精品色综合| 久久99蜜桃精品| 亚洲精品国产91| 久久久一区二区三区| 久久精品国产99| 欧美日韩色视频| 国产精品久久久久久久久久久免费看| 99国产精品久久| 日韩精品在线看片z| 国产酒店精品激情| 国精产品久拍自产在线网站| 亚洲国产精品av| 成人网在线免费视频| 欧美日韩精品一区视频| 亚洲国产精品久久不卡毛片| 久久久高清视频| 久久蜜臀中文字幕| 91色视频在线| 欧美肥胖老妇做爰| 国产一区二区三区免费播放| av资源在线免费观看| 一区二区成人在线| 久久午夜精品视频| 樱花草国产18久久久久| 最新中文字幕视频| 日韩美女精品在线| 大尺度在线观看| 国产日韩一级二级三级| 成人福利视频网站| 欧美优质美女网站| 视频一区视频二区中文| 一级性生活大片| 自拍偷拍国产精品| 怡红院一区二区三区| 国产精品乱码一区二三区小蝌蚪| 国产精品果冻传媒| 国产精品网站在线观看| 800av在线播放| 久久久久久一级片| 天天躁日日躁狠狠躁av| 综合激情网...| 久久久久久久毛片| 亚洲va欧美va天堂v国产综合| 91香蕉视频在线播放| 青娱乐精品视频在线| 亚洲少妇xxx| 人人狠狠综合久久亚洲| 欧日韩精品视频| 国产成人免费在线视频| 欧美日韩视频第一区| 国产福利一区二区三区视频 | 欧美日韩国产大片| 国v精品久久久网| 欧美精品一区二区三区四区| 岛国精品在线观看| 2023国产精华国产精品| 国产精品手机在线观看| 国产欧美日韩精品在线| 真实乱偷全部视频| 久久这里只有精品首页| 水蜜桃av无码| 亚洲图片自拍偷拍| 色爱区综合激月婷婷| 国产精品一二二区| 精品99一区二区三区| 成人手机在线免费视频| 国产精品欧美一级免费| 先锋影音av在线| 欧美aaaaaa午夜精品| 欧美高清视频一二三区| 三上悠亚 电影| 亚洲人成影院在线观看| 亚洲伦理一区二区三区| 国产伦精一区二区三区| 久久久www成人免费毛片麻豆| 性欧美丰满熟妇xxxx性仙踪林| 午夜精品久久一牛影视| 欧美日韩国产一区二区三区地区| 99riav久久精品riav| 亚洲视频网在线直播| 日韩一级片av| 成人激情综合网站| 国产精品看片你懂得| 欧美视频www| 成人免费看视频| 亚洲欧洲精品一区二区三区 | 亚洲熟女一区二区| 亚洲五码中文字幕| 欧美精品18+| 久久久久久久久免费看无码| 日韩精品一级中文字幕精品视频免费观看 | 亚洲欧洲日韩女同| 色综合久久88色综合天天 | 免费在线看成人av| 日韩免费观看高清完整版在线观看| 800av在线播放| 美女视频黄 久久| 久久午夜国产精品| 老司机深夜福利网站| 丁香婷婷综合色啪| 亚洲男人天堂一区| 欧美日韩精品一区二区三区 | 四虎永久免费观看| 午夜精品一区二区三区电影天堂| 欧美一区二区视频网站| 国产在线a视频| 午夜精品福利视频网站| 日韩视频永久免费| 亚洲自拍偷拍图| 国产成人精品免费| 亚洲精品一二三四区| 欧美人成免费网站| 国精品无码人妻一区二区三区| 日韩综合一区二区| 欧美精品一区二| 日韩一级片大全| 极品白嫩的小少妇| 久久精品999| 中文字幕一区二区三区乱码在线| 91国偷自产一区二区使用方法| 极品白嫩的小少妇| 久久精品久久久精品美女| 日本一区免费视频| 欧美怡红院视频| 91av在线免费| 成人在线一区二区三区| 亚洲在线观看免费视频| 精品福利二区三区| 国产乱国产乱老熟300| 97人妻精品一区二区三区免费| 久久成人18免费观看| 中文字幕日本不卡| 337p亚洲精品色噜噜狠狠| www.17c.com喷水少妇| 精品一区二区三区欧美| 久久久精品国产免大香伊| 色综合天天综合给合国产| 在线观看成人动漫| 国产一区二区三区四区五区入口| 亚洲色图欧洲色图| 欧美成人猛片aaaaaaa| 久草网站在线观看| 亚洲av无码国产精品久久| 国产宾馆实践打屁股91| 亚洲成人免费av| 亚洲国产精品二十页| 欧美一区二区三区视频在线观看| 日本不卡一二区| 男男做爰猛烈叫床爽爽小说| 国产成人在线视频网站| 天天综合色天天| 国产精品国产精品国产专区不蜜| 日韩一区和二区| 色伊人久久综合中文字幕| 亚洲精品成人无码| 一级全黄裸体片| 国产91综合网| 久久精品久久99精品久久| 亚洲综合一区在线| 中文字幕国产一区| 精品日韩一区二区三区| 免费中文字幕日韩| 国产精品三级在线观看无码|