Lua中的多个返回值

遇到了这个问题。 对于一个多返回值的函数

fn=function() return 'a','b' end

调用

print(fn()) 返回 a b

而调用

print(fn() or nil) 只返回 a

为什么?因为第一个调用成功了,所以or不应该有影响才对啊?

点赞
用户1009479
用户1009479

引自 Programming in Lua §5.1 – 多重返回值

Lua 总是根据函数调用的情况来调整函数返回的结果数量。当我们将函数作为语句调用时,Lua 会丢弃函数返回的所有结果。 当我们将函数作为表达式调用时,Lua 仅保留第一个结果。只有在函数调用是表达式列表中的最后一个(或唯一的)表达式时,我们才能获取所有的结果。

在你的例子中,fn() 的返回值被用作表达式(作为 or 运算符的左操作数),因此仅保留第一个值。

2013-11-14 02:17:57