Булевы операторы && и || называются оценкой короткого замыкания.
Они объединяют последовательность логических выражений, оценивая только наименьшее количество выражений, чтобы определить логическое значение всей цепочки.
В выражении a && b подвыражение b оценивается только в том случае, если a истинно
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | julia> f(x) = (println(x); true) f (generic function with 1 method) julia> g(x) = (println(x); false) g (generic function with 1 method) julia> f( 1 ) && f( 2 ) 1 2 true julia> f( 1 ) && g( 2 ) 1 2 false julia> g( 1 ) && f( 2 ) 1 false julia> g( 1 ) && g( 2 ) 1 false |
В выражении a || b подвыражение b оценивается только в том случае, если a ложно
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | julia> f(x) = (println(x); true) f (generic function with 1 method) julia> g(x) = (println(x); false) g (generic function with 1 method) julia> f( 1 ) || f( 2 ) 1 true julia> f( 1 ) || g( 2 ) 1 true julia> g( 1 ) || f( 2 ) 1 2 true julia> g( 1 ) || g( 2 ) 1 2 false |
&& имеет приоритет над ||
?1 2 | julia> false || true && false false |
&& и || могут быть представлены оператором if
&&
?1 2 3 4 5 6 7 | expression && statement # 可以写成 if 语句 if expression statement end |
выражение и, таким образом, утверждение
||
?1 2 3 4 5 6 7 | expression || statement # 可以写成 if 语句 if !expression statement end |
выражение или утверждение
Операнд && и || также должен быть логическим значением, то есть истинным или ложным, и не может быть заменен 1 и 0.
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | julia> 1 && true ERROR: TypeError: non - boolean (Int64) used in boolean context Stacktrace: [ 1 ] top - level scope at none: 0 julia> 0 && true ERROR: TypeError: non - boolean (Int64) used in boolean context Stacktrace: [ 1 ] top - level scope at none: 0 julia> 1 || true ERROR: TypeError: non - boolean (Int64) used in boolean context Stacktrace: [ 1 ] top - level scope at none: 0 julia> 0 || true ERROR: TypeError: non - boolean (Int64) used in boolean context Stacktrace: [ 1 ] top - level scope at none: 0 |
Последним элементом краткой оценки может быть выражение любого типа, которое можно вычислить и вернуть.
?1 2 3 4 5 6 7 8 9 10 11 | julia> true && (x = 2 ) 2 julia> false && (x = 2 ) false julia> true || (x = 2 ) true julia> false || (x = 2 ) 2 |
операторы оценки без короткого замыкания, вы можете использовать побитовые логические операторы & и |
& является операцией И. В операции И верны только две истины, то есть a && b, оба a и b истинны, и результат верен.
| является операцией ИЛИ, и одна из операций ИЛИ истинна, то есть верно a || b, a или b, результат верен; a и b оба верны, результат также верен
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | julia> true & true true julia> true & false false julia> false & true false julia> false & false false julia> true | true true julia> true | false true julia> false | true true julia> false | false false |