Lua的泛型for迴圈

2021-08-10 22:11:12 字數 1534 閱讀 7868

泛型for的語義

泛型for比較複雜,它在迴圈過程內儲存了迭代器函式。它實際上儲存著3個值:乙個迭代器函式、乙個恆定狀態和乙個控制變數。接下來,分別進行總結。

泛型for的語法如下:

for

indo

end

其中,是乙個或多個變數名的列表,以逗號分隔;是乙個或多個表示式的列表,同樣以逗號分隔。通常表示式列表只有乙個元素,即一句對迭代器函式的呼叫。例如:

for k, v in

pairs(t) do

print(k, v) end

for做的第一件事就是對in後面的表示式求值,這些表示式應該返回3個值供for儲存:迭代器函式、恆定狀態和控制變數的初值。這裡和多重賦值是一樣的,只有最後乙個表示式才會產生多個結果,並且只會保留前3個值,多餘的值會被丟棄;而不夠的話,就以nil補足。

在初始化完成以後,for會以恆定狀態和控制變數來呼叫迭代器函式。然後for將迭代器函式的返回值賦予變數列表中的變數。如果第乙個返回值為nil,那麼迴圈就終止,否則,for執行它的迴圈體,隨後再次呼叫迭代器函式,並重複這個過程。在前言部分的**中,只是返回了迭代器函式,並沒有返回恆定狀態和控制變數。下面通過**來說明這個問題,比如:

for

var_1, ..., var_n

indo

end--

就等價於以下**:

dolocal

_f,

_s,

_var

= --

返回迭代器函式、恆定狀態和控制變數的初值

while

true

dolocal

var_1, ..., var_n = _f(

_s,

_var

)

_var

=var_1

if_var

== nil

then

break

endend

endend

綜上總結一下:

1.我們先理解 for 語句的 意思

for ...(1) in func(2) ...(3) do

end...(1) 是每次執行引數為...(3)的函式func(2)的返回值,直到返回nil,也就是...(1)整體為nil值時,迴圈結束 

例子 [plain]

view plain

copy

local a = 0  

local function pa(b,c)  

a = a + 1  

if a < 5 then  

return 1,2,3,a  

else  

return nil  

end  

end  

for i,j,k,v in pa,1,1 do  

print(i,j,k,v)  

end  

泛型 for 的使用(lua)

泛型 for 的使用 table a function issameitem table 1,table 2 for i,v in pairs table 1 do if table 2 i v then return false endend return true enda b function...

泛型和增強for迴圈

一.泛型 1.泛型機制是一種把資料型別明確推遲到建立物件或者呼叫方法時才去明確的一種機制 2泛型的語法格式 資料型別,資料型別 注意 泛型中的型別必須是引用型別 3.泛型只在編譯期有效,在執行期間就擦除了 4.泛型的好處 1 把問題提前到了編譯期 2 避免了向下轉型 5.泛型可以定義在介面,類,方法...

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...