Lua有狀態迭代器

大雄45發表於2022-07-26
導讀 很多情況下,迭代器需要儲存多個狀態資訊而不是簡單的狀態常量和控制變數,最簡單的方法是使用閉包,還有一種方法就是將所有的狀態資訊封裝到 table 內,將 table 作為迭代器的狀態常量,因為這種情況下可以將所有的資訊存放在 table 內,所以迭代函式通常不需要第二個引數。
案例

有狀態迭代器
有狀態迭代器的使用

#!/usr/bin/lua
print("haicoder()\n")
array = {"Hello", "HaiCoder", "Lua"}
function elementIterator (collection)
   local index = 0
   local count = #collection
   -- 閉包函式
   return function ()
      index = index + 1
      if index <= count
      then
         --  返回迭代器的當前元素
         return collection[index]
      end
   end
end
for element in elementIterator(array)
do
   print(string.format("Element = %s", element))
end

程式執行,控制檯輸出,如下圖:

Lua有狀態迭代器Lua有狀態迭代器

上面的例子中我們可以看到,在 elementIterator 函式內定義了另外一個匿名函式。此匿名函式中使用了一個外部變數 index (譯註:此變數在匿名函式之外,elementIterator 函式內)。每次內部的匿名函式被呼叫時,都會將 index 的值增加 1,並統計數返回的每個元素。

我們可以參照上面的方法使用閉包建立一個迭代器函式。每次我們使用迭代器遍歷集合時,它都可以返回多個元素。

Lua有狀態迭代器總結

很多情況下,迭代器需要儲存多個狀態資訊而不是簡單的狀態常量和控制變數,最簡單的方法是使用閉包,還有一種方法就是將所有的狀態資訊封裝到 table 內,將 table 作為迭代器的狀態常量,因為這種情況下可以將所有的資訊存放在 table 內,所以迭代函式通常不需要第二個引數。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2907545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章