来看这样一段代码的输出结果

function f123()
    return 1, 2, 3
end

function f456()
    return 4, 5, 6
end

print(f123())                      -- A
print(f456())                      -- B
print(f123(), f456())              -- C
print(f123(), (f456()))            -- D

-- output
-- 1	  2    3          
-- 4	  5    6
-- 1	  4    5    6
-- 1    4

有趣的是 C 这一行,f123() 只输出了一个 1

这个原理在 Programming in Lua 里有解释,文中称 Lua 的多返回值设计是 「An unconventional, but quite convenient feature」,看得我想骂人。

对于 D 行,加了括号之后就只返回一个返回值,Lua Reference Manual 3.4.10Lua Reference Manual 3.4.11 里也有说明。