当两个变量相同时 && 如何工作?
how does && work when both the variables are the same?
我正在学习 groovy 处理智能事物,并在各种示例和现有代码中找到了一个相对通用的命令(见下文)。
阅读&&运算符的功能我会认为“&& cmd.previousMeterValue”是多余的。还是我缺少一些代码快捷方式?
谢谢
约翰
if (cmd.previousMeterValue && cmd.previousMeterValue != cmd.meterValue) {
do something
}
不知道 previousMeterValue
有什么类型,这个答案有点笼统。
Groovy 遵循常见的 operator precedence,即 !=
在 &&
.
之前计算
为了明确显示,完整的表达式与:
(cmd.previousMeterValue) && (cmd.previousMeterValue != cmd.meterValue)
cmd.previousMeterValue
正在测试 Groovy-Truth.
的值
根据值类型,以下可能适用:
- Non-null object references are coerced to true.
- Non-zero numbers are true.
所以如果值为null
或0
,则表达式为false
.
如果表达式的第一部分计算为 false
,则第二部分为 skipped。
The logical &&
operator: if the left operand is false, it knows that the result will be false in any case, so it won’t evaluate the right operand. The right operand will be evaluated only if the left operand is true.
如果表达式的第一部分计算为 true
,则计算 cmd.previousMeterValue != cmd.meterValue
,使用 following rule:
In Groovy ==
translates to a.compareTo(b)==0
, if they are Comparable
, and a.equals(b)
otherwise.
所以如果值是一个数字对象,那么它被计算为:
cmd.previousMeterValue.compareTo(cmd.meterValue) != 0
这意味着 BigDecimal
值按值进行比较,忽略特定比例。
我正在学习 groovy 处理智能事物,并在各种示例和现有代码中找到了一个相对通用的命令(见下文)。
阅读&&运算符的功能我会认为“&& cmd.previousMeterValue”是多余的。还是我缺少一些代码快捷方式?
谢谢 约翰
if (cmd.previousMeterValue && cmd.previousMeterValue != cmd.meterValue) {
do something
}
不知道 previousMeterValue
有什么类型,这个答案有点笼统。
Groovy 遵循常见的 operator precedence,即 !=
在 &&
.
之前计算
为了明确显示,完整的表达式与:
(cmd.previousMeterValue) && (cmd.previousMeterValue != cmd.meterValue)
cmd.previousMeterValue
正在测试 Groovy-Truth.
的值
根据值类型,以下可能适用:
- Non-null object references are coerced to true.
- Non-zero numbers are true.
所以如果值为null
或0
,则表达式为false
.
如果表达式的第一部分计算为 false
,则第二部分为 skipped。
The logical
&&
operator: if the left operand is false, it knows that the result will be false in any case, so it won’t evaluate the right operand. The right operand will be evaluated only if the left operand is true.
如果表达式的第一部分计算为 true
,则计算 cmd.previousMeterValue != cmd.meterValue
,使用 following rule:
In Groovy
==
translates toa.compareTo(b)==0
, if they areComparable
, anda.equals(b)
otherwise.
所以如果值是一个数字对象,那么它被计算为:
cmd.previousMeterValue.compareTo(cmd.meterValue) != 0
这意味着 BigDecimal
值按值进行比较,忽略特定比例。