Lua學習筆記 3 關於pairs和ipairs

2021-08-02 10:27:19 字數 1576 閱讀 3476

[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...