最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lua中的迭代器和泛型for實(shí)例

 更新時(shí)間:2014年09月27日 16:26:20   作者:Mr.Ant  
這篇文章主要介紹了Lua中的迭代器和泛型for實(shí)例,本文還講解了無(wú)狀態(tài)迭代器,需要的朋友可以參考下

1、迭代器與closure

在lua中,迭代器通常為函數(shù),每調(diào)用一次函數(shù),會(huì)返回集合中的下一個(gè)元素。每個(gè)迭代器在成功調(diào)用的時(shí)候,都需要保存一些狀態(tài),closure(閉包)完美為迭代器運(yùn)用而生。

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

function values(t)
    local i=0
    return function() --匿名函數(shù)
    i=i+1
    return t[i]
    end
end

t1 ={10, 20, 30}
it=values(t1)   --創(chuàng)建閉包變量的參數(shù)為函數(shù)參數(shù)
while true do
    local element=it()      --調(diào)用閉包時(shí)的參數(shù)為匿名函數(shù)的參數(shù)
    if(element==nil) then break
    end
    print(element)
end

t2={11,22,33}
for v in values(t2) do
   print(v)
end
--輸出結(jié)果
--10
--20
--30
--11
--22
--33

從上面的例子可以看出,范型for相對(duì)于while給我們提供了更為清晰的實(shí)現(xiàn)邏輯。luo的內(nèi)部函數(shù)已經(jīng)為我們提供了迭代函數(shù),運(yùn)行foreach時(shí)我們會(huì)調(diào)用隱式的迭代器。

2、泛型for的語(yǔ)義

上面的迭代器有一個(gè)明顯的缺點(diǎn),就是每次循環(huán)時(shí)都要?jiǎng)?chuàng)建一個(gè)新的closure變量,而不能運(yùn)用之前已經(jīng)創(chuàng)建好了的closure變量,如果我在這個(gè)循環(huán)外再加一個(gè)循環(huán)進(jìn)行迭代時(shí),這就成了一個(gè)很繁瑣并且容易出錯(cuò)的問(wèn)題。

下面出現(xiàn)的迭代器很好的解決了這個(gè)問(wèn)題,就不必為每次的泛型for都創(chuàng)建一個(gè)新的closure變量了。

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

function iter(a,i)
   i=i+1
   if a[i]==nil then return nil,nil
   else return i,a[i]
   end
end

function ipairs(a)
   return iter,a,0         --iter在這里只是一個(gè)函數(shù)變量,并不是調(diào)用函數(shù)
end

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

--上面的泛型for的寫(xiě)法可以改為下面的while寫(xiě)法
do
    local _it,_s,_k=ipairs(a)
    while true do
       k,v=_it(_s,_k)
       _k=k
       if k==nil then break end
       print(k,v)
    end
end
--輸出結(jié)果
--1 one
--2 two
--3 three
--1 one
--2 two
--3 three

3、無(wú)狀態(tài)迭代器

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

function getnext(list,node)
  if not node then return list
  else return   node.next
  end
end

function traverse(list)
  return getnext,list,nil
end

list=nil
for line in io.lines() do
   list={next=list, value=line}
end

for node in traverse(list) do
    print(node.value)
end
--輸入
--a
--b
--c
--輸出
--c
--b
--a

通過(guò)上面的例子可以看出,可以無(wú)限次運(yùn)用list變量和調(diào)用traverse函數(shù)而不必像第一種情況那樣每次循環(huán)之前都創(chuàng)建新的closure變量。

相關(guān)文章

  • 使用lua實(shí)現(xiàn)php的var_dump()函數(shù)功能

    使用lua實(shí)現(xiàn)php的var_dump()函數(shù)功能

    小編比較熟悉php,所以這篇文章主要介紹了使用lua實(shí)現(xiàn)php的var_dump()函數(shù)功能,需要的朋友可以參考下
    2014-11-11
  • Lua利用cjson讀寫(xiě)json示例分享

    Lua利用cjson讀寫(xiě)json示例分享

    本文結(jié)合本人的實(shí)際使用經(jīng)驗(yàn)和代碼示例,介紹如何在Lua中對(duì)json進(jìn)行encode和decode,需要的朋友可以參考下
    2014-11-11
  • Lua與C語(yǔ)言間的交互實(shí)例

    Lua與C語(yǔ)言間的交互實(shí)例

    這篇文章主要介紹了Lua與C語(yǔ)言間的交互實(shí)例,本文主要講解了Lua中調(diào)用C語(yǔ)言的方法和例子,需要的朋友可以參考下
    2014-12-12
  • Lua中的迭代器淺析

    Lua中的迭代器淺析

    這篇文章主要介紹了Lua中的迭代器淺析,本文先是講解了什么是迭代器,然后給出了自己寫(xiě)一個(gè)迭代器的示例,最后介紹了迭代器的調(diào)用方法,需要的朋友可以參考下
    2014-09-09
  • Lua中使用模塊的一些基礎(chǔ)知識(shí)

    Lua中使用模塊的一些基礎(chǔ)知識(shí)

    這篇文章主要介紹了Lua中使用模塊的一些基礎(chǔ)知識(shí),說(shuō)明基本上都融入注釋之中,需要的朋友可以參考下
    2015-07-07
  • Lua教程(十): 全局變量和非全局的環(huán)境

    Lua教程(十): 全局變量和非全局的環(huán)境

    這篇文章主要介紹了Lua教程(十): 全局變量和非全局的環(huán)境,本文講解了老的全局變量環(huán)境和Lua5中新的非全局環(huán)境相關(guān)知識(shí),需要的朋友可以參考下
    2015-04-04
  • 使用Lua作為C語(yǔ)言項(xiàng)目的配置文件實(shí)例

    使用Lua作為C語(yǔ)言項(xiàng)目的配置文件實(shí)例

    這篇文章主要介紹了使用Lua作為C語(yǔ)言項(xiàng)目的配置文件實(shí)例,本文用Lua創(chuàng)建了一個(gè)配置文件,然后在C言語(yǔ)中解析它,需要的朋友可以參考下
    2015-04-04
  • Lua中的迭代器和泛型for實(shí)例

    Lua中的迭代器和泛型for實(shí)例

    這篇文章主要介紹了Lua中的迭代器和泛型for實(shí)例,本文還講解了無(wú)狀態(tài)迭代器,需要的朋友可以參考下
    2014-09-09
  • Lua中的__index方法詳解

    Lua中的__index方法詳解

    這篇文章主要介紹了Lua中的__index方法詳解,本文詳細(xì)講解了__index方法的相關(guān)知識(shí),以及代碼示例,需要的朋友可以參考下
    2015-04-04
  • Lua極簡(jiǎn)入門(mén)指南(六):模塊

    Lua極簡(jiǎn)入門(mén)指南(六):模塊

    這篇文章主要介紹了Lua極簡(jiǎn)入門(mén)指南(六):模塊,本文講解了require函數(shù)、編寫(xiě)模塊、查找模塊等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評(píng)論

龙井市| 安徽省| 成武县| 宁武县| 泰和县| 马尔康县| 江城| 玛纳斯县| 汽车| 肇州县| 长沙县| 大足县| 上犹县| 四子王旗| 厦门市| 五指山市| 江口县| 桃江县| 休宁县| 介休市| 南通市| 沿河| 秦皇岛市| 满洲里市| 丘北县| 广昌县| 湘乡市| 峨山| 神农架林区| 陆良县| 镇赉县| 临高县| 从江县| 正蓝旗| 甘洛县| 新余市| 报价| 信宜市| 大同县| 龙山县| 富宁县|