在分配值以简化代码(lua)时使用和/或运算符

时间:2019-01-30 14:45:22

标签: lua

我想问一下是否可以简化此示例代码段:

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声明是如何工作的,也将不胜感激,谢谢。

1 个答案:

答案 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