Использование и / или операторов при назначении значений для упрощения кода (lua) - PullRequest
0 голосов
/ 30 января 2019

Я хотел бы спросить, возможно ли упростить этот пример фрагмента кода:

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

(Возвращает -1, когда слева == true, 1, когда справа == true, 0, если либоtrue или false)

с использованием операторов и / или при объявлении самого значения, например:

local left = true
local right = true

local xPos = right and not left and 1 or -1

Проблема с последним примером заключается в том, что он не ведет себя как предыдущий,так как он возвращает -1, когда оба являются истинными или ложными.

Если кто-то объяснит, как последняя декларация xPos работает в деталях, это также будет высоко оценено, спасибо.

1 Ответ

0 голосов
/ 30 января 2019

Способ, которым 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, и это то, что xPos установлено в.

Если вы сделаете изменение в коде, вы можетепосмотрите, как это работает под другим углом.

local xPos = false and 1

Что здесь происходит?xPos = false.это связано с тем, что при использовании and lua не будет продолжать оценку, если первое условие равно false.Это означает, что последняя оцененная переменная была false, поэтому xPos = false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...