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

Lua中的迭代器和泛型for實例

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

1、迭代器與closure

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

復制代碼 代碼如下:

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ù)
    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相對于while給我們提供了更為清晰的實現(xiàn)邏輯。luo的內(nèi)部函數(shù)已經(jīng)為我們提供了迭代函數(shù),運行foreach時我們會調(diào)用隱式的迭代器。

2、泛型for的語義

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

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

復制代碼 代碼如下:

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在這里只是一個函數(shù)變量,并不是調(diào)用函數(shù)
end

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

--上面的泛型for的寫法可以改為下面的while寫法
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、無狀態(tài)迭代器

復制代碼 代碼如下:

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

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

相關(guān)文章

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

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

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

    Lua利用cjson讀寫json示例分享

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

    Lua與C語言間的交互實例

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

    Lua中的迭代器淺析

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

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

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

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

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

    使用Lua作為C語言項目的配置文件實例

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

    Lua中的迭代器和泛型for實例

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

    Lua中的__index方法詳解

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

    Lua極簡入門指南(六):模塊

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

最新評論

綦江县| 枝江市| 芮城县| 连云港市| 东方市| 焦作市| 荔浦县| 聊城市| 财经| 应城市| 灯塔市| 建始县| 密云县| 前郭尔| 拉萨市| 拜城县| 卢氏县| 宁阳县| 张家港市| 乐山市| 丽江市| 什邡市| 大邑县| 来安县| 缙云县| 石门县| 凌云县| 黄龙县| 宁蒗| 临邑县| 涞源县| 常宁市| 佛学| 唐海县| 河南省| 大城县| 什邡市| 托里县| 罗平县| 民乐县| 绍兴县|