今天開始迭代器的學習,看了《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...