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.
我在这里错过了什么,如何让"三元运算符"像我期望的那样工作?
你错过了Lua的and
并且or
是短片,而且逗号在层次结构中较低.基本上这里发生的是首先4 > 5 and 1
被评估false
并被2 or 3
评估2
,4
被忽略.在第二种情况下4 < 5
是true
,因此4 < 5 and 1
就是1
,其余保持原样.
正如Egor Skriptunoff建议你做的那样
a, b = unpack(4 > 5 and {1,2} or {3,4})
Run Code Online (Sandbox Code Playgroud)
代替.