之前遇到过这个问题。对于多返回值函数
fn=function() return 'a','b' end
通话
print(fn())
返回a b
但电话
print(fn() or nil)
只退货a
为什么?or
应该没关系,因为第一次调用成功吧?
之前遇到过这个问题。对于多返回值函数
fn=function() return 'a','b' end
通话
print(fn())
返回a b
但电话
print(fn() or nil)
只退货a
为什么?or
应该没关系,因为第一次调用成功吧?
引自Programming in Lua §5.1 – 多个结果
Lua 总是根据调用的情况调整函数的结果数量。当我们将函数作为语句调用时,Lua 会丢弃该函数的所有结果。当我们使用调用作为表达式时,Lua 只保留第一个结果。只有当调用是表达式列表中的最后一个(或唯一的)表达式时,我们才会得到所有结果。
在您的示例中,返回值fn()
用作表达式(运算符的左操作数or
),因此仅保留第一个值。