麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

淺析Lua中的迭代器

2024-07-21 23:04:52
字體:
來源:轉載
供稿:網(wǎng)友

 迭代器是一種結構,使能夠遍歷所謂的集合或容器中的元素。在Lua中,這些集合通常是指那些用于創(chuàng)建各種數(shù)據(jù)結構,如數(shù)組表。
一般對于迭代器

一個通用的迭代器提供的鍵值對集合中的每個元素。下面一個簡單的實例。

 

復制代碼 代碼如下:
array = {"Lua", "Tutorial"}

 

for key,value in ipairs(array)
do
   print(key, value)
end

 

當我們運行上面的代碼之后將得到下面的輸出

 

復制代碼 代碼如下:
1  Lua
2  Tutorial

 

上面的示例使用由Lua中提供的默認ipairs迭代函數(shù)。

在Lua中,我們使用函數(shù)來表示迭代器?;谶@些迭代器的功能狀態(tài)保持,有兩種主要類型:

  1.     無狀態(tài)的迭代器
  2.     迭代器狀態(tài)

無狀態(tài)的迭代器

由名字本身就可以明白,這類型的迭代器功能不保留任何狀態(tài)。

現(xiàn)在讓我們來看看使用打印n個數(shù)的平方簡單的函數(shù),來創(chuàng)建我們自己的迭代器的例子。

 

復制代碼 代碼如下:
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

 

for i,n in square,3,0
do
   print(i,n)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
1 1
2 4
3 9

 

上面的代碼可以稍微進行修改,以模仿迭代器的工作方式ipairs函數(shù)。它如下所示。

 

復制代碼 代碼如下:
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

 

function squares(iteratorMaxCount)
   return square,iteratorMaxCount,0
end 

for i,n in squares(3)
do
 print(i,n)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
1 1
2 4
3 9

 

迭代器狀態(tài)

迭代使用功能不保留狀態(tài),前面的例子。每次調用該函數(shù)時,它返回一個基于發(fā)送給函數(shù)的第二變量的集合的下一個元素。來保存當前元素的狀態(tài),封閉物使用。關閉保留不同職能調用變量的值。要創(chuàng)建一個新的閉包,我們創(chuàng)建了兩個函數(shù),包括封閉自己,一個工廠,創(chuàng)建封閉的功能。

現(xiàn)在讓我們看看創(chuàng)造我們自己的迭代中,我們將使用閉包的一個例子。

 

復制代碼 代碼如下:
array = {"Lua", "Tutorial"}

 

function elementIterator (collection)
   local index = 0
   local count = #collection
   -- The closure function is returned
   return function ()
      index = index + 1
      if index <= count
      then
         -- return the current element of the iterator
         return collection[index]
      end
   end
end

for element in elementIterator(array)
do
   print(element)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
Lua
Tutorial

 

在上面的例子中,我們可以看到,元素迭代具有另一種方法里,使用的本地外部變量索引和計數(shù)由每個函數(shù)被調用時遞增索引,返回每個集合中的元素。

我們可以創(chuàng)建使用閉包的函數(shù)的迭代器,如上圖所示,它可以返回多個元素,每一個我們通過收集循環(huán)時間。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产一级大片在线观看 | 欧美人与zoxxxx另类9 | 美女羞羞视频在线观看 | 中文字幕综合 | 国产精品久久久久久久午夜片 | 欧美黄色一级片视频 | 久久精品中文字幕一区二区 | 色综合激情 | 欧美性受xxxx人人本视频 | 精品一区二区在线观看 | 久久久久国产成人精品亚洲午夜 | 欧美一区二区三区久久精品视 | 国产交换3p国产精品 | 91精品国产乱码久 | 99最新地址| 精品国产成人 | 国产精品成人久久 | 宅男噜噜噜66国产在线观看 | 午夜精品久久久久久中宇 | 黄污在线看 | 国产精品久久久久久久久久大牛 | 欧美成人综合视频 | 亚州精品在线视频 | wwwxxx视频 | 国产伦精品一区二区三区在线 | 久久国产乱子伦精品 | 久久这| 色视频一区二区 | 久久久视频免费观看 | 国产一区二区三区在线观看视频 | 精品一区二区三区免费视频 | 毛片免费看电影 | av免费不卡国产观看 | 精选久久 | 黄色免费在线电影 | 久久精品亚洲精品国产欧美kt∨ | 毛片在线免费视频 | 欧美一级精品片在线看 | 91精品国产日韩91久久久久久360 | 国产自在自线午夜精品视频在 | 日本综合久久 |