Когда условие проверяется, если, elsif, до или во время использования и / или операторов, используется оценка короткого замыкания. Например —
if a < 0 and b > 0 then -- block of code end if
Если a <0 является ложным, то Euphoria не потрудится проверить, больше ли b, чем 0. Он знает, что общий результат равен false независимо. Точно так же —
if a < 0 or b > 0 then -- block of code end if
если a <0 истинно, то Euphoria немедленно решает, что результат истинен, без проверки значения b, поскольку результат этого теста не имеет значения.
В общем, всякий раз, когда у вас есть условие следующей формы —
A and B
Если A и B могут быть любыми двумя выражениями, Euphoria сокращает время, когда A ложно, и сразу же делает общий результат ложным, даже не глядя на выражение B.
Точно так же, когда у вас есть условие следующей формы —
A or B
Если A истинно, Euphoria пропускает оценку выражения B и объявляет результат верным.
Оценка короткого замыкания и и или выполняется только для условий if, elsif, before и while. Он не используется в других контекстах. Например —
x = 1 or {1,2,3,4,5} -- x should be set to {1,1,1,1,1}
Если бы здесь использовалось короткое замыкание, вы бы установили x на 1, и даже не смотрели бы на {1,2,3,4,5}, что было бы неправильно.
Таким образом, короткое замыкание можно использовать в условиях if, elsif, before или while, потому что вам нужно заботиться только о том, является ли результат истинным или ложным, и условия, необходимые для получения атома в результате.