博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Julia - 短路求值
阅读量:2259 次
发布时间:2019-05-09

本文共 1873 字,大约阅读时间需要 6 分钟。

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

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

在表达式 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)12truejulia> f(1) && g(2)12falsejulia> g(1) && f(2)1falsejulia> g(1) && g(2)1false

在表达式 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)1truejulia> f(1) || g(2)1truejulia> g(1) || f(2)12truejulia> g(1) || g(2)12false

&& 比 || 优先级高

julia> false || true && falsefalse

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

&&

expression && statement# 可以写成 if 语句if expression	statementend

expression 从而 statement

||

expression || statement# 可以写成 if 语句if !expression	statementend

expression 要不就 statement

&& 和 || 的运算对象也必须是布尔值,即为 true 或 false,不能用 1 和 0 来代替

julia> 1 && trueERROR: TypeError: non-boolean (Int64) used in boolean contextStacktrace: [1] top-level scope at none:0julia> 0 && trueERROR: TypeError: non-boolean (Int64) used in boolean contextStacktrace: [1] top-level scope at none:0julia> 1 || trueERROR: TypeError: non-boolean (Int64) used in boolean contextStacktrace: [1] top-level scope at none:0julia> 0 || trueERROR: TypeError: non-boolean (Int64) used in boolean contextStacktrace: [1] top-level scope at none:0

短路求值的最后一项可以是任何类型的表达式,它可以被求值并返回

julia> true && (x = 2)2julia> false && (x = 2)falsejulia> true || (x = 2)truejulia> false || (x = 2)2

非短路求值运算符,可以使用位布尔运算符 & 和 |

& 为与运算,与运算中,两个真才为真,即 a && b,a 和 b 都为真,结果才为真

| 为或运算,或运算中,有一个为真就为真,即 a || b,a 或 b 为真,结果为真;a 和 b 全为真,结果也为真

julia> true & truetruejulia> true & falsefalsejulia> false & truefalsejulia> false & falsefalsejulia> true | truetruejulia> true | falsetruejulia> false | truetruejulia> false | falsefalse

 

转载于:https://www.cnblogs.com/sch01ar/p/9535897.html

你可能感兴趣的文章
MyBatis 源码分析——动态代理----动态获取Mapper接口实例
查看>>
MyBatis源码解析 ---- MyBatis动态SQL底层原理分析
查看>>
理解线程池的原理
查看>>
Mybatis源码分析----Mybatis数据源与连接池(1)
查看>>
Mybatis源码分析-----Mybatis数据源与连接池(2)
查看>>
Dubbo架构设计详解
查看>>
IOC 的理解与解释
查看>>
Spring容器的创建过程
查看>>
单据号生成
查看>>
深入理解 Spring 事务原理
查看>>
【多线程编程】分布式锁的几种使用方式(redis、zookeeper、数据库)
查看>>
Zookeeper、Redis分布式锁,实现与区别
查看>>
elasticsearch和lucene的关系以及elasticsearch的核心概念
查看>>
elasticsearch技术总结(一)-集群分片
查看>>
elasticsearch技术总结(二)-集群管理
查看>>
用Java位运算实现加减乘除四则运算
查看>>
Java并发之彻底搞懂偏向锁升级为轻量级锁
查看>>
Netty精粹之基于EventLoop机制的高效线程模型
查看>>
Java NIO之Selector(选择器)
查看>>
idea中Maven自动下载源码、文档和自动导入
查看>>