Lua三目运算符 - 多个变量

如果某一条件为真,我想将两个值分配给两个变量,如果该条件为假,则分配两个不同的值。我假设应该像这样完成:

a, b = 4 > 5 and 1, 2 or 3, 4

但是这将a分配为false,将b分配为2。 如果我们有:

a, b = 4 < 5 and 1, 2 or 3, 4

这将正确分配a为1,b为2。

我错过了什么,我该如何让“三元运算符”按照我期望的方式工作?

点赞
用户542190
用户542190

你忽略了 Lua 的 andor 具有短路运算的特点,同时逗号的优先级也更低。基本上这里发生的是,首先对于 4 > 5 and 1,它被计算为 false,而 2 or 3 则被计算为 2,因此 4 被忽略了。而在第二个情况中,4 < 5true,因此 4 < 5 and 1 被计算为 1,剩余的部分保持不变。

正如 Egor Skriptunoff 所建议的那样,你可以使用下面的代码代替:

a, b = unpack(4 > 5 and {1,2} or {3,4})
2014-08-18 11:50:39