婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識(shí)庫 > Lua中的迭代器和泛型for實(shí)例

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

熱門標(biāo)簽:智能語音電銷的機(jī)器人 電腦外呼系統(tǒng)輻射大嗎 武漢百應(yīng)人工智能電銷機(jī)器人 百度地圖標(biāo)注位置網(wǎng)站 開通400電話申請(qǐng)流程 上海企業(yè)外呼系統(tǒng)排名 400手機(jī)電話免費(fèi)辦理 揚(yáng)州電銷外呼系統(tǒng)軟件 如何利用高德地圖標(biāo)注家

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的語義

上面的迭代器有一個(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ò)的問題。

下面出現(xiàn)的迭代器很好的解決了這個(gè)問題,就不必為每次的泛型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的寫法可以改為下面的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)迭代器

復(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

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

您可能感興趣的文章:
  • 深入解讀Lua中迭代器與泛型for的使用
  • 淺析Lua中的迭代器
  • Lua教程(五):迭代器和泛型for
  • Lua中的迭代器和泛型for介紹
  • Lua中的迭代器和泛型for學(xué)習(xí)總結(jié)
  • Lua中的迭代器(iterator)淺析
  • Lua的迭代器使用中應(yīng)該避免的問題和技巧
  • Lua中的for循環(huán)和迭代器的秘密探究
  • Lua中的迭代器淺析
  • Lua基礎(chǔ)迭代器的使用實(shí)例

標(biāo)簽:嘉峪關(guān) 武漢 黑龍江 張掖 延邊 宜賓 江西 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua中的迭代器和泛型for實(shí)例》,本文關(guān)鍵詞  Lua,中的,迭代,器,和,泛型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua中的迭代器和泛型for實(shí)例》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua中的迭代器和泛型for實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 皮山县| 宁波市| 吉安县| 社会| 丹东市| 通海县| 浦东新区| 双桥区| 博爱县| 武威市| 黑龙江省| 新郑市| 沙坪坝区| 兴业县| 安陆市| 海城市| 泰来县| 玉门市| 安仁县| 瑞昌市| 随州市| 调兵山市| 富裕县| 宜阳县| 淮滨县| 安泽县| 富锦市| 鄂伦春自治旗| 黄骅市| 嵊州市| 义马市| 腾冲县| 翁源县| 柳河县| 客服| 河东区| 龙海市| 留坝县| 祁阳县| 南充市| 丹东市|