鍍金池/ 教程/ C/ Lua迭代器
Lua邏輯運算符
Lua其他運算符
Lua協(xié)同程序
Lua break語句
Lua運算符
Lua面向?qū)ο?/span>
Lua教程
Lua函數(shù)
Lua數(shù)據(jù)庫/MySQL操作
Lua關系運算符
Lua錯誤處理
Lua數(shù)據(jù)類型
Lua嵌套循環(huán)
Lua變量
Lua基本語法
Lua字符串
Lua for循環(huán)
Lua if語句嵌套
Lua運算符優(yōu)先級
Lua Web編程
Lua while循環(huán)
Lua開發(fā)環(huán)境
Lua if...else語句
Lua標準庫
Lua游戲編程
Lua if語句
Lua算術運算符
Lua表格
Lua決策
Lua文件I/O
Lua循環(huán)
Lua數(shù)組
Lua元表
Lua repeat...until循環(huán)
Lua迭代器
Lua調(diào)試
Lua模塊
Lua垃圾收集

Lua迭代器

迭代器是一種結(jié)構,使能夠遍歷所謂的集合或容器中的元素。在Lua中,這些集合通常是指那些用于創(chuàng)建各種數(shù)據(jù)結(jié)構,如數(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)保持,有兩種主要類型:

  • 無狀態(tài)的迭代器
  • 迭代器狀態(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),前面的例子。每次調(diào)用該函數(shù)時,它返回一個基于發(fā)送給函數(shù)的第二變量的集合的下一個元素。來保存當前元素的狀態(tài),封閉物使用。關閉保留不同職能調(diào)用變量的值。要創(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ù)被調(diào)用時遞增索引,返回每個集合中的元素。

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


上一篇:Lua決策下一篇:Lua數(shù)據(jù)類型