Parameters Lua参数未正确展开
我是Lua的新手,也许这是一个很难回答的问题,但是为什么下面的代码失败了呢?据我所知,foo返回两个参数,并且由于在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
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,{}