Parameters Lua参数未正确展开

Parameters Lua参数未正确展开,parameters,lua,variable-length,Parameters,Lua,Variable Length,我是Lua的新手,也许这是一个很难回答的问题,但是为什么下面的代码失败了呢?据我所知,foo返回两个参数,并且由于在Lua中,您可以根据您的心脏的需要传递任意多的参数,第一个参数传递得很好,但是第二个调用没有通过断言 function foo() return true, {} end function bar(a,b,c) assert(type(b)=="table", "Expected table as the second parameter") print("Fine") e

我是Lua的新手,也许这是一个很难回答的问题,但是为什么下面的代码失败了呢?据我所知,foo返回两个参数,并且由于在Lua中,您可以根据您的心脏的需要传递任意多的参数,第一个参数传递得很好,但是第二个调用没有通过断言

function foo()
 return true, {}
end

function bar(a,b,c)
 assert(type(b)=="table", "Expected table as the second parameter")
 print("Fine")
end

bar(foo())      -- Fine
bar(foo(),true) -- Expected table as the second parameter
请阅读

函数调用和vararg表达式都可能导致多个 价值观如果函数调用用作语句(见§3.3.6),则 它的返回列表被调整为零元素,因此丢弃所有元素 返回值。如果表达式用作最后一个(或唯一) 元素,则不进行任何调整(除非 表达式用括号括起来)。在所有其他情况下,Lua 将结果列表调整为一个元素,或者放弃所有值 除了第一个,或者如果没有值,则添加一个nil

foo(),true
是解析为
true,true
的表达式列表,因为
foo()
既不是该列表中的唯一表达式,也不是最后一个表达式。 而
true,foo()
将解析为
true,true,{}