多个结果
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"}
这只捕获了调用的第一个结果,而忽略了其余的结果。