lua迭代器和仿製藥for

2021-09-07 01:21:33 字數 891 閱讀 1261

不管是什麼樣的結構,你只需要同意遍歷集合可以稱為迭代器的所有元素。lua常用來形容敘事功能迭代器。個元素。每個迭代器都須要儲存一些狀態來知道當前處於什麼位置和怎樣進行下一次迭代。

對於這種任務。閉包提供了非常好的機制來完畢。乙個典型的閉包結構包括兩個函式:乙個是閉包自身,乙個是建立閉包的工廠。

比如,我們能夠寫過簡單的list迭代器,讓他只返回值。

function values( t )

local i = 0;

return function() i = i + 1;return t[i] end

endtb =

for v in values(tb) do

print(v)

end泛型for簿記全部迭代迴圈,首先呼叫迭代工廠,並內部儲存迭代函式。每次迭代時呼叫新的迭代函式。但迭代器返回nil迴圈結束。

上面的迭代器有個瑕疵:須要建立乙個閉包。建立閉包是須要代價的。僅僅是大部分情況下都沒問題,然而有些情況卻是不能容忍這個代價的。這時的解決方法是使用泛型for。泛型for本身儲存迭代狀態。包含迭代函式。狀態常量。控制變數,因此不必付出閉包的代價,稱這樣的迭代器為無狀態迭代器。

泛型for的語法:

for in do

end執行過程:

1.初始化迭代函式,狀態常量,控制變數,不足補nil,多出忽略。

2.狀態常量。控制變數作為引數呼叫迭代函式。

3.將迭代函式返回的值付給變數列表。

4.假設返回的第乙個值為nil。則迴圈結束,否則執行迴圈體。

5.回到第2步。

假設遇到須要儲存多個狀態,還有種方法是將全部狀態封裝到表中。實際上,我們不推薦這麼寫。

由於建立閉包的代價比建立表的要小。和lua處理速度更快封閉。有更強大的和複雜的方法是使用協同作用以建立乙個迭代。

Lua 迭代器和閉包

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

lua迭代器原理

當lua呼叫for迴圈中的ipairs a 時,它會獲得三個值 迭代器函式iter 恆定狀態a和控制變數的處置0。然後lua呼叫iter a,0 得到1,a 1 在第二次迭代中,繼續呼叫iter a,1 得到2,a 2 依次類推,直到得到的第乙個nil元素為止。pairs與ipairs類似,也是用於...

Lua 迭代器初學

和c 類似,lua也有迭代器,如汎型for。泛型for需要三個值 迭代函式 狀態常量 控制變數 乙個典型的泛型for如下 for k,v in pairs t do print k,v end 泛型for的執行過程 首先,初始化,計算 in 後面表示式的值,表示式應該返回泛型for需要的三個值 迭代...