我想问一下是否可以简化此示例代码段:
local left = true
local right = true
local xPos = 0
if left or right then
if left and not right then
xPos = -1
elseif right and not left then
xPos = 1
else
xPos = 0
end
end
(当左边== true时返回-1,右边== true时返回1,如果是true或false则返回0)
在声明值本身时使用和/或运算符,例如:
local left = true
local right = true
local xPos = right and not left and 1 or -1
后一个示例的问题是它的行为不像前一个,因为当两者均为true或false时返回-1。
如果有人要详细解释后面的xPos声明是如何工作的,也将不胜感激,谢谢。
答案 0 :(得分:0)
lua处理三元运算符的方式是分配最后一个求值变量。
以您的代码为例:
local xPos = right and not left and 1 or -1
right and not left
的值为true
时,您的部分如下所示:
local xPos = true and 1 or -1
因为and
语句的第一个值是true
,因此and
语句在比较1
中返回第二个值or
语句,然后再不评估{{结果是1}},因为-1
是一个“真实的”值,所以最后计算的变量是1
,这就是1
所设置的。
如果您更改了代码,则可以从另一个角度看到它的工作原理。
xPos
这里发生了什么? local xPos = false and 1
。这是因为,如果第一个条件为xPos = false
,则在使用and
lua时将不会继续评估。这意味着最后评估的变量是false
,所以false
。