[toc]
遍歷table
local tbtestpairs =,
ntest_2,
}for k, v in pairs(tbtestpairs) do
print (k, v)
end
結果
sztest test
tbtest table: 000000000033a630
ntest_1 2
按順序便利table
local tbtestipairs =
for k, v in ipairs(tbtestipairs) do
print(k ,v)
end
結果
1 1
2 33 5
說到底,pairs和ipairs都是lua中的迭代器。迭代器是一種可以遍歷一種結合中所有元素的機制[1]。可以看泛型for的語義:
for
list> in do
end
for在迴圈過程中儲存了迭代器函式。for做的第一件事就是對in後面的表示式求值,這些表示式應該返回3個值供for儲存(這裡也就知道如果自己實現迭代器需要根據語法要求來寫):
在初始化完成之後,for會以恆定狀態和控制變數來呼叫迭代器函式。可以看下面的**,更加清晰:
for var_1, ..., var_n in
doend
-- 等價於以下**
do local _f, _s, _var = -- 返回迭代器函式、恆定狀態和控制變數的初值
while
true
do local var_1, ..., var_n = _f(_s, _var)
_var = var_1
if _var == nil
then
break
endend
end
參考[1]中專門對這個泛型for問題說的非常詳細!感謝作者^_^
local function
iter
(a, k)
k, v = next
(a, k)
; if v then
return k, v;
endendfunction
pairs
(t)return
iter, t, nil
;end
local function
iter
(a, i)
i = i + 1;
if a[i] then
return i, a[i];
endendfunction
ipairs
(t)return
iter, t, 0;
end
lua學習筆記12 pairs和ipairs
在lua中,pairs和iparis都可以用於遍歷數字,他們也是有區別的,而且區別還挺大,看下面幾個例子 local tabfiles for k,v in ipairs tabfiles do print k,v end ipairs tabfiles 遍歷時,當key 1時候value就是nil...
Lua學習筆記3 函式
函式定義形如 function 函式名 引數列表 函式體end 例如 function add a,b return a b end相當於 add function a,b return a b end 和c語言一樣,lua的函式可以接受可變引數個數,它同樣是用 來定義的,比如 function s...
Lua學習筆記 lua堆疊
首先了解一下c 與lua之間的通訊 假設在乙個lua檔案中有如下定義 hello.lua檔案 請注意紅色數字,代表通訊順序 1 c 想獲取lua的myname字串的值,所以它把myname放到lua堆疊 棧頂 以便lua能看到 2 lua從堆疊 棧頂 中獲取myname,此時棧頂再次變為空 3 lu...