透過結果看本質.jpg
前言
今天來看一個老朋友,這個函數在我們使用剛開始學習lua的時候基本就使用過,通常就是在遍歷table的時候使用,大家再熟悉不過了,不過,今天我想總結點別的方面的知識,相信大多數的使用者并沒有想過這個問題——他居然有三個返回值,我們借用今天的例子來講解一下。
內容
ipairs()
- 原型:ipairs(t)
- 解釋:這個函數返回三個值,他們分別是一個迭代函數、一個表
t
和一個值0,使用構造式for i,v in ipairs(t) do body end
將會遍歷表t
中所有的數組元素對(1, t[1]),(2, t[2])……
一直到數字索引不存在的一個元素。
Usage
- 首先我們新建一個文件將文件命名為pairstest.lua然后編寫代碼如下:
-- 定義一個table
local tab = {
23,
35,
[3] = 45,
78,
[8] = 101,
}
-- 打印查看table
print("\nthe table is", tab)
-- 查看函數ipairs的返回值
print("\nthe return value of ipairs is", ipairs(tab))
-- 正常使用ipairs函數
print("\nuse ipairs resault:")
for k,v in ipairs(tab) do
print(k,v)
end
-- 先取得函數ipairs返回值
local func, new_tab, index = ipairs(tab)
print("\nchange index use ipairs resault:")
-- 改變index的值來調用遍歷函數
for i,v in func, new_tab, index + 1 do
print(i,v)
end
local change_tab = {
"c",
"lua"
}
print("\nchange new_tab use ipairs resault:")
-- 改變new_tab的值來調用遍歷函數
for i,v in func, change_tab, index do
print(i,v)
end
- 運行結果
base_ipairs.png
總結
- 需要首先注意的是這個函數只能輸出索引從1開始并且連續的table,也就是說只能遍歷數組,這就是為什么正常遍歷只輸出了3個值。
- 通過例子我們知道函數
ipairs()
返回了三個值,比較打印信息可知,其中第二個返回值就是我們傳進去的參數t
。 - 我們可以直接使用函數
ipairs()
的返回值進行遍歷操作。 - 我們也可以修改這三個值來修改循環遍歷的行為,如上述例子中所做的那樣。
- 可能很多人和我一開始一樣,對第三個返回的0有一些疑問,不知道究竟有什么用,其實我感覺他就是遍歷table的起始索引,例子中修改
index
的值以后,輸出信息發生變化也證明了這一點。