程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 淺析Lua中的迭代器

淺析Lua中的迭代器

編輯:更多關於編程

       這篇文章主要介紹了Lua中的迭代器,是Lua入門學習中的基礎知識,需要的朋友可以參考下

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

      一般對於迭代器

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

      代碼如下:

      array = {"Lua", "Tutorial"}

      for key,value in ipairs(array)

      do

      print(key, value)

      end

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

       代碼如下:

      1 Lua

      2 Tutorial

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

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

      無狀態的迭代器

      迭代器狀態

      無狀態的迭代器

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

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

      代碼如下:

      function square(iteratorMaxCount,currentNumber)

      if currentNumber

      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

      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

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

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved