&& 和 || 的布尔运算符被称为短路求值

它们连接一系列布尔表达式,仅计算最少的表达式来确定整个链的布尔值

在表达式 a && b 中,只有 a 为 true 时才计算子表达式 b

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 中,只有 a 为 false 时才计算子表达式 b

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

&& 比 || 优先级高

julia> false || true && false
false

&& 和 || 可以用 if 语句来表示

&&

expression && statement

# 可以写成 if 语句

if expression
statement
end

expression 从而 statement

||

expression || statement

# 可以写成 if 语句

if !expression
statement
end

expression 要不就 statement

&& 和 || 的运算对象也必须是布尔值,即为 true 或 false,不能用 1 和 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 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> 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 全为真,结果也为真

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

最新文章

  1. sql select 综合运用
  2. Gym - 100917H
  3. 基于<MediaElement>的WPF视频播放器(可拖拽进度条播放)【1】
  4. js判断三个数字中的最大值
  5. UVa 1395 Slim Span【最小生成树】
  6. MYSQL- 存储过程示例
  7. TDirectory.GetAttributes、TDirectory.SetAttributes获取和设置文件夹属性
  8. Java中的守护线程 & 非守护线程(简介)
  9. Ubuntu安装JDK(tar.gz)
  10. centos安装Chromium
  11. Objective-C开发编码规范
  12. Android研究之游戏开发处理按键的响应
  13. HMM 隐马尔科夫模型
  14. AngularJS–Scope(作用域)
  15. MSSQL 常用操作
  16. Spring Web工程web.xml零配置即使用Java Config + Annotation
  17. DBUtils——handler
  18. Jquery实现菜单栏
  19. yii2 配合bootstrap添加按钮
  20. textarea 赋值的方法

热门文章

  1. OkHttp之ConnectInterceptor简单分析
  2. OkHttp使用Get和Post访问服务器的工具类(一)
  3. threejs 世界坐标与屏幕坐标相互转换
  4. Codeforces 1030E 【暴力构造】
  5. BZOJ2243 SDOI2011 染色 【树链剖分】
  6. java集成WebSocket向所有用户发送消息
  7. LeetCode 675. Cut Off Trees for Golf Event
  8. 图像对比度调整的simulink仿真总结
  9. ffmpeg hls 点播负载均衡简单实现
  10. Serf 了解