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"}
这仅捕获呼叫的第一个结果,而忽略其余的结果。