Lua筆記11 迭代器和閉包

2021-07-04 13:06:08 字數 1102 閱讀 6312

迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素。在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集合的下乙個元素。

迭代器需要保留上一次成功呼叫的狀態和下一次成功呼叫的狀態,也就是他知道來自於**和將要前往**。閉包提供的機制可以很容易實現這個任務。記住:閉包是乙個內部函式,它可以訪問乙個或者多個外部函式的外部區域性變數。每次閉包的成功呼叫後這些外部區域性變數都儲存他們的值(狀態)。當然如果要建立乙個閉包必須要建立其外部區域性變數。所以乙個典型的閉包的結構包含兩個函式:乙個是閉包自己;另乙個是工廠(建立閉包的函式)。

寫乙個簡單的迭代器,與

ipairs()

不同的是我們實現的這個迭代器返回元素的值而不是索引下標:

print("------------迭代器----------------------")

function iter_director (tabt)

local i = 0

local n = table.getn(tabt)

return function ()

i = i + 1

if i <= n then return tabt[i] end

endendt =

iter = iter_director(t)

while true do

local element = iter()

if element == nil then break end

print(element)

end

這個例子中iter_director是乙個工廠,每次呼叫他都會建立乙個新的閉包(迭代器本身)。閉包儲存內部區域性變數(tabt,i,n),因此每次呼叫他返回iter_director中的下乙個元素值,當iter_direcotr中沒有值時,返回nil。

這個迭代器也很容易用於範性for語句:

print("------------迭代器 into for ----------------------")

tfor =

for i in iter_director(tfor) do

print(i)

end

Lua 迭代器和閉包

內容來自 lua程式設計 第四版 18.1節 迭代器和閉包。迭代器 iterator 是一種可以讓我們遍歷乙個集合中所有元素的 結構。在 lua 語言中,通常使用函式表示迭代器 每一次呼叫函式時,函式會返回集合中的 下乙個 元素。乙個典型的例子就是io.read,每次呼叫該函式時它都會返回標準輸入中...

11 閉包 迭代器

今日主要內容 第一類物件 函式名 變數名 函式物件物件可以像變數一樣進行賦值 還可以作為列表的元素進行使用 可以作為返回值返回 可以作為引數進行傳遞 閉包 函式的巢狀 內層函式對外層函式中的變數的使用 好處 1.保護變數不被侵害 2.讓乙個變數常駐記憶體 如何通過 檢視乙個閉包 closure 有東...

day 11 迭代器 閉包

1.第一類物件,函式名的使用,函式名就是變數名,函式名儲存的是函式的記憶體位址 溫習前面學過的變數 1 由數字,字母,下劃線組成 2 不能是數字開頭,更不能是純數字 3 不能用關鍵字 4 不要太長 5 要有意義 6 不要用中文 7 區分大小寫 8 駝峰線或者下劃線 2.閉包 在內層函式中引入外層函式...