泛型for的語義
泛型for比較複雜,它在迴圈過程內儲存了迭代器函式。它實際上儲存著3個值:乙個迭代器函式、乙個恆定狀態和乙個控制變數。接下來,分別進行總結。
泛型for的語法如下:
forindo
end
其中,是乙個或多個變數名的列表,以逗號分隔;是乙個或多個表示式的列表,同樣以逗號分隔。通常表示式列表只有乙個元素,即一句對迭代器函式的呼叫。例如:
for k, v inpairs(t) do
print(k, v) end
for做的第一件事就是對in後面的表示式求值,這些表示式應該返回3個值供for儲存:迭代器函式、恆定狀態和控制變數的初值。這裡和多重賦值是一樣的,只有最後乙個表示式才會產生多個結果,並且只會保留前3個值,多餘的值會被丟棄;而不夠的話,就以nil補足。
在初始化完成以後,for會以恆定狀態和控制變數來呼叫迭代器函式。然後for將迭代器函式的返回值賦予變數列表中的變數。如果第乙個返回值為nil,那麼迴圈就終止,否則,for執行它的迴圈體,隨後再次呼叫迭代器函式,並重複這個過程。在前言部分的**中,只是返回了迭代器函式,並沒有返回恆定狀態和控制變數。下面通過**來說明這個問題,比如:
forvar_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的引數型別,其...