Lua 學習筆記(六) 迭代器和泛型for

2021-06-26 08:50:39 字數 1475 閱讀 1877

今天開始迭代器的學習,看了《programming in lua 》這一章,看了2遍才稍微弄懂了一點兒,在這裡與大家一起分享。

一、迭代器就是遍歷集合的元素

這是乙個簡單的迭代器程式,用途是遍歷t這個table中的值

function value(t)

local i = 0

return function()

i = i + 1

return t[i]

endend

呼叫迭代器:

t = 

local iter = value(t) -- 建立迭代器

while true do

-- 盡可能的使用區域性變數,呼叫迭代器

local e = iter()

if e then

print(e)

else

break;

endend

建立乙個closure(迭代器)後,儲存在變數iter中,此後迴圈呼叫時就不會產生新的closure。

二、泛型for語句

首先,for對in後面的表示式求值,表示式返回迭代器函式、恆定狀態和控制變數的初值給for儲存。

然後,for會以恆定狀態和控制變數來呼叫迭代器函式。

最後,for執行迴圈體,直到迭代器函式的第乙個返回值為nil。迴圈結束。

又是上面的例子,這次是用泛型for呼叫迭代器:

t =  --陣列

for v in value(t) do

print(v)

end

相當於:

do

--1. for對in後面的表示式求值,返回值:_f:迭代函式 _s:恆定狀態 _var:控制變數的初始值

local _f,_s,_var = value(t)

--2. for進入迴圈狀態

while true do

local v = _f(_s,_var) --呼叫迭代函式

_var = v

if _var == nil then

break --3. 結束迴圈

endprint(v)

endend

三、迭代器接受函式作為引數,在其內部的迴圈中呼叫函式

這段**表示在遍歷當前檔案中所有的單詞:

function allwords(f)

for line in io.lines() do

-- io.lines 迭代函式:從檔案中讀取一行

for word in string.gmatch(line,"%w+") do

--string.gmatch迭代函式:從line中查詢單詞

f(word)

endend

endallwords(print)

Lua學習(七) 迭代器和泛型for

array for key,value in ipairs array doprint key,value end 上面的示例使用由lua中提供的預設ipairs迭代函式。function square iteratormaxcount,currentnumber if currentnumbere...

Lua學習筆記之迭代器與范型for

lua學習筆記之迭代器與范型for 1 迭代器與閉包 迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素。迭代器需要保留上一次成功呼叫的狀態和下一次成功呼叫的狀態,也就是它知道來自於 和將要前往 閉包提供的機制可以很容易實現這個任務。記住 閉包是以惡搞內部函式,它可以訪問乙個或者多個外部函式...

Lua入門教程 6 迭代器與泛型for

所謂迭代器就是一種可以遍歷一種集合中所有元素的機制。每個迭代器都需要在每次成功呼叫之間儲存一些狀態,這樣才知道下一步進行到何處,而closure則為這一任務提供了很好的支援。function value t local i 0 return function i i 1 return t i end...