Способ, которым 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
.