国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

淺析Lua中的迭代器

2024-07-21 23:04:52
字體:
來源:轉載
供稿:網友

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

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

 

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

 

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

 

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

 

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

 

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

在Lua中,我們使用函數來表示迭代器。基于這些迭代器的功能狀態保持,有兩種主要類型:

  1.     無狀態的迭代器
  2.     迭代器狀態

無狀態的迭代器

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

現在讓我們來看看使用打印n個數的平方簡單的函數,來創建我們自己的迭代器的例子。

 

復制代碼 代碼如下:
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函數。它如下所示。

 

復制代碼 代碼如下:
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

 

迭代器狀態

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

現在讓我們看看創造我們自己的迭代中,我們將使用閉包的一個例子。

 

復制代碼 代碼如下:
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

 

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 榕江县| 增城市| 平邑县| 莆田市| 二手房| 电白县| 新民市| 封丘县| 潮安县| 亳州市| 札达县| 加查县| 上虞市| 台北市| 进贤县| 获嘉县| 肇东市| 安远县| 普陀区| 左权县| 正定县| 永年县| 仁布县| 东海县| 平罗县| 南漳县| 丽水市| 平凉市| 城固县| 玉环县| 宁波市| 苍南县| 北辰区| 揭西县| 陇川县| 会宁县| 南川市| 清流县| 合山市| 龙井市| 长子县|