Lua 多个结果

示例

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

这仅捕获呼叫的第一个结果,而忽略其余的结果。