多個結果

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"}

這隻捕獲了呼叫的第一個結果,而忽略了其餘的結果。