多個結果
Lua 中的函式可以返回多個結果。
例如:
function triple(x)
return x, x, x
end
呼叫函式時,要儲存這些值,必須使用以下語法:
local a, b, c = triple(5)
在這種情況下,這將導致 a = b = c = 5
。通過在變數列表中的所需位置使用一次性變數 _
,也可以忽略返回值:
local a, _, c = triple(5)
在這種情況下,將忽略第二個返回值。也可以通過不將它們分配給任何變數來忽略返回值:
local a = triple(5)
變數 a
將被分配第一個返回值,其餘兩個將被丟棄。
當函式返回可變數量的結果時,可以通過執行其中的函式將它們全部儲存在表中:
local results = {triple(5)}
這樣,可以遍歷 results
表以檢視函式返回的內容。
注意
在某些情況下,這可能是一個驚喜,例如:
local t = {}
table.insert(t, string.gsub(" hi", "^%s*(.*)$", "%1")) --> bad argument #2 to 'insert' (number expected, got string)
發生這種情況是因為 string.gsub
返回 2 個值:給定的字串,替換了模式的出現次數,以及發生的匹配總數。
要解決這個問題,要麼使用中間變數,要麼在呼叫周圍放置 ()
,如下所示:
table.insert(t, (string.gsub(" hi", "^%s*(.*)$", "%1"))) --> works. t = {"hi"}
這隻捕獲了呼叫的第一個結果,而忽略了其餘的結果。