6

之前遇到过这个问题。对于多返回值函数

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

通话

print(fn())返回a b

但电话

print(fn() or nil)只退货a

为什么?or应该没关系,因为第一次调用成功吧?

4

1 回答 1

5

引自Programming in Lua §5.1 – 多个结果

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

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

于 2013-11-14T02:17:57.837 回答