欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lua中的迭代器淺析

 更新時間:2014年09月13日 10:23:52   作者:笨木頭  
這篇文章主要介紹了Lua中的迭代器淺析,本文先是講解了什么是迭代器,然后給出了自己寫一個迭代器的示例,最后介紹了迭代器的調用方法,需要的朋友可以參考下

今天學習的內容還蠻有意思的,讓我興奮了一下~

1.迭代器

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

復制代碼 代碼如下:

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

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

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

2.自己寫一個迭代器

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

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

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

因為每一次調用dieDaiQi函數(shù),就會產生一個新的閉合函數(shù),所以我們要用一個iter變量保存這個閉合函數(shù),避免重復創(chuàng)建。

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

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

復制代碼 代碼如下:

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

3.更簡潔的迭代器調用

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

復制代碼 代碼如下:

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

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

答案是:不會的。

因為for循環(huán)只會調用一次dieDaiQi函數(shù),然后把它的返回值保存起來。

4.結束

這篇的介紹似乎是異常地簡短,其實不是的,還有下篇,因為我怕接下來要說的東西比較多,導致文章太長。

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

相關文章

  • 舉例詳解Lua中的協(xié)同程序編程

    舉例詳解Lua中的協(xié)同程序編程

    這篇文章主要介紹了Lua中的協(xié)同程序編程,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • 詳解Lua中的while循環(huán)語句的使用

    詳解Lua中的while循環(huán)語句的使用

    這篇文章主要介紹了詳解Lua中的while循環(huán)語句的使用,是Lua入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Lua面向對象編程之類的簡單實現(xiàn)方式

    Lua面向對象編程之類的簡單實現(xiàn)方式

    這篇文章主要介紹了Lua面向對象編程之類的簡單實現(xiàn)方式,本文直接給出一個類的編碼實例,并詳細講解了調用方式,需要的朋友可以參考下
    2015-04-04
  • Lua table簡明總結

    Lua table簡明總結

    這篇文章主要介紹了Lua table簡明總結,table是lua唯一的數(shù)據(jù)結構,table 是 lua 中最重要的數(shù)據(jù)類型,本文詳細講解了table的相關知識,需要的朋友可以參考下
    2014-10-10
  • Lua中對table排序實例

    Lua中對table排序實例

    這篇文章主要介紹了Lua中對table排序實例,本文講解了Lua中對table的一般排序方法、針對值的排序、同時對鍵值進行排序等方法,需要的朋友可以參考下
    2014-09-09
  • Lua常用時間函數(shù)使用實例

    Lua常用時間函數(shù)使用實例

    這篇文章主要介紹了Lua常用時間函數(shù)使用實例,本文直接給出使用代碼實例,并附有詳細注釋,要用到哪個復制即可,需要的朋友可以參考下
    2015-04-04
  • Lua操作字符串的5個代碼片段分享

    Lua操作字符串的5個代碼片段分享

    這篇文章主要介紹了Lua操作字符串的5個代碼片段分享,本文講解了匹配字符串中的數(shù)字、字母和下劃線、替換字符串中的指定字符、判斷字符串中是否有目標字串、從文件的絕對路徑中獲取到文件名等內容,需要的朋友可以參考下
    2015-04-04
  • Lua math.fmod使用時的小數(shù)問題

    Lua math.fmod使用時的小數(shù)問題

    這篇文章主要介紹了Lua math.fmod使用時的小數(shù)問題,math.fmod用于取模運算,使用小數(shù)時可能會遇到不可預料的結果,所以應該避免使用小數(shù),需要的朋友可以參考下
    2015-06-06
  • Lua極簡入門指南:全局變量

    Lua極簡入門指南:全局變量

    這篇文章主要介紹了Lua極簡入門指南:全局變量,本文講解了全局變量、_ENV等內容,需要的朋友可以參考下
    2014-10-10
  • lua獲取未來某時間點的時間戳解決方案

    lua獲取未來某時間點的時間戳解決方案

    這篇文章主要介紹了lua獲取未來某時間點的時間戳解決方案,需要的朋友可以參考下
    2014-12-12

最新評論