Lua三元运算符 - 多个变量

Tom*_*Tom 4 lua ternary-operator

假设我想在某个条件为真时为两个变量分配两个值,如果所述条件为假则为两个不同的值.我会假设它会这样做:

a, b = 4 > 5 and 1, 2 or 3, 4
Run Code Online (Sandbox Code Playgroud)

然而,这指定为假,b为2.如果我们有:

a, b = 4 < 5 and 1, 2 or 3, 4
Run Code Online (Sandbox Code Playgroud)

这正确地指定a为1,b为2.

我在这里错过了什么,如何让"三元运算符"像我期望的那样工作?

fil*_*mor 6

你错过了Lua的and并且or是短片,而且逗号在层次结构中较低.基本上这里发生的是首先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})
Run Code Online (Sandbox Code Playgroud)

代替.

  • 正如旁注:如果有任何问题,使用正常的`if ... then else end`构造将会更有效率. (4认同)