Lua有狀態迭代器
導讀 | 很多情況下,迭代器需要儲存多個狀態資訊而不是簡單的狀態常量和控制變數,最簡單的方法是使用閉包,還有一種方法就是將所有的狀態資訊封裝到 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
程式執行,控制檯輸出,如下圖:
上面的例子中我們可以看到,在 elementIterator 函式內定義了另外一個匿名函式。此匿名函式中使用了一個外部變數 index (譯註:此變數在匿名函式之外,elementIterator 函式內)。每次內部的匿名函式被呼叫時,都會將 index 的值增加 1,並統計數返回的每個元素。
我們可以參照上面的方法使用閉包建立一個迭代器函式。每次我們使用迭代器遍歷集合時,它都可以返回多個元素。
Lua有狀態迭代器總結
很多情況下,迭代器需要儲存多個狀態資訊而不是簡單的狀態常量和控制變數,最簡單的方法是使用閉包,還有一種方法就是將所有的狀態資訊封裝到 table 內,將 table 作為迭代器的狀態常量,因為這種情況下可以將所有的資訊存放在 table 內,所以迭代函式通常不需要第二個引數。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2907545/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Lua迭代器
- 伺服器狀態出錯情況有哪些?伺服器
- 系統設計架構:有狀態與無狀態架構
- 伺服器埠狀態伺服器
- 伺服器狀態碼伺服器
- 【知識分享】伺服器狀態出錯情況有哪些伺服器
- 架構設計(五):有狀態服務和無狀態服務架構
- 工作流從無狀態切換到有狀態的好處
- 在Linux中,程序狀態有哪些?Linux
- flink 有狀態(stateful)的計算
- ijkplayer 播放器狀態解析播放器
- 編譯lua動態庫編譯
- 迭代器
- SAP BSP應用有狀態和無狀態行為差異比較
- Python進階:迭代器與迭代器切片Python
- TCP為什麼是有狀態的?TCP
- k8s pod狀態有哪些K8S
- Kubernetes 實戰——有狀態應用(StatefulSet)
- docker筆記28-stateful(有狀態應用副本集)控制器Docker筆記
- SAP Fiori和WebClient UI的有狀態和無狀態行為設計原理WebclientUI
- 最全的HTTP響應狀態碼列表:除了404,HTTP狀態碼還有啥?HTTP
- 迭代器 iterator
- Python迭代器Python
- Ruby迭代器
- Iterator迭代器
- 迭代器模式模式
- TypeScript迭代器TypeScript
- Python 迭代器Python
- 可迭代物件、迭代器、生成器物件
- Iterator與Iterable(迭代器與可迭代)
- Python可迭代的物件與迭代器Python物件
- 從迭代器模式到迭代協議模式協議
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- OpenResty + Lua 動態增加 Zuul 節點RESTZuul
- 前端狀態管理與有限狀態機前端
- 3個有狀態應用程式的無伺服器開發策略 - Twain Taylor伺服器AI
- [二、狀態管理]2管理元件擁有的狀態(5)@Observed裝飾器和@ObjectLink裝飾器:巢狀類物件屬性變化元件Object巢狀物件
- 23. 迭代器