Julia - 短路求值
&& 和 || 的布尔运算符被称为短路求值
它们连接一系列布尔表达式,仅计算最少的表达式来确定整个链的布尔值
在表达式 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
Julia - 短路求值的更多相关文章
- 一个短路求值引起的一个小bug
今天在写一个判断字符串是否回文时因为短路求值问题导致了一个bug,记录如下: 代码如下 bool isPal(char str[],int len) { int begin=0; int end=le ...
- 一道PHP题引出的“短路求值”
今天群里有个人问了一个问题,代码如下: $a = 3; $b = 2; if ($a = 2 || $b = 5) { ++$a; } echo $a; 说代码段的执行的结果为1,问大家$a的 ...
- C 语言 - 逻辑运算和短路求值
逻辑运算符: 运算符 含义 优先级 ! 逻辑非 高 && 逻辑与 中 || 逻辑或 低 举例: !a:如果 a 为真,!a 为假:如果 a 为 假,!a 为真 a && ...
- php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干)
php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干) 一.总结 1.仔细分析题干,找出要点:该递归还是得递归啊 2.短路求值原理:&&就是逻辑与,逻辑与有 ...
- js 实用技巧 短路求值
&&运算符 如果操作有false 则返回false 例如 0&&1 // 返回0 true&&false //返回false 0&&a ...
- “短路求值(Short-Circuit Evaluation)
// 逻辑与和逻辑或操作符总是先计算其做操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数. function aa() { if (null) { console ...
- C语言对表达式的求值顺序不是明确规定的
讨论区看到的 WA来自那些递归下降求解的代码. 第一种情况,使用|| 和 &&: 例如s为所给串 int getval() { switch(s[c_s++]) { case 'p': ...
- 【部分原创】标准C语言的优先级、结合性、求值顺序、未定义行为和非确定行为浅析
零. 优先级 在C++ Primer一书中,对于运算符的优先级是这样描述的: Precedence specifies how the operands are grouped. It ...
- Aviator 表达式求值引擎开源框架
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...
随机推荐
- Swift显示alert和promp confirmation
Swift 显示alert func Alert(title:String, msg:String)->Void{ let alert = UIAlertController(title: ti ...
- postgresql的now()与Oracle的sysdate
postgresql的now()为当前事务开始时间, 而Oracle的sysdate是当前时间. 区别在于事务. postgresql中的now(): postgres=# begin ; BEGIN ...
- Android Studio3.0 Kotlin工程问题集
问题1: 新建支持Kotlin的Android项目,卡在"Resolve dependency :classpath" 解决分析: 一般碰到"Resolve depend ...
- height 与 min-height 的继承
min-height: inherit; 继承父元素的 min-height: 80px; 但,不能继承父元素的 height: 200px; height: inherit; 能继承父元素的: he ...
- [Python] json 报错'xxx is not JSON serializable'的处理方法
predictions = self.model.predict(x_data, verbose=0)[0] y_pred_idx = np.argmax(predictions) y_pred_pr ...
- HDU1520 Anniversary party 树形DP基础
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...
- hiho 1612
emmmmm?A不了?90分是什么鬼 #include<cstdio> #include<cstdlib> #include<vector> #include< ...
- [转]:What happens to older developers?
原文链接可能失效. This post is old but will remain on the front page for the time being. 140313. Jeff Jenkin ...
- Java并发--如何创建线程
下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...
- Sprint第一个冲刺(第五天)
一.Sprint介绍 今天我们主要做的是修复乱码,完善项目. 任务进度: 二.Sprint周期 看板: 燃尽图: