多个结果

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

这只捕获了调用的第一个结果,而忽略了其余的结果。