我的方法如下
def myMethod(myDouble: Double): Double = myDouble match {
case Double.NaN => ...
case _ => ...
}
IntelliJ 调试器显示 NaN,但这在我的模式匹配中没有被识别出来。是否有我遗漏的可能情况
这是根据 IEEE 754 比较 64 位浮点数的一般规则(与 Scala 甚至 Java 无关,请参阅NaN http://en.wikipedia.org/wiki/NaN):
double n1 = Double.NaN;
double n2 = Double.NaN;
System.out.println(n1 == n2); //false
这个想法是NaN
是一个标记值unknown or 不定。比较两个未知值应该总是产生false
因为他们都……不为人知。
如果你想使用模式匹配NaN
, 尝试这个:
myDouble match {
case x if x.isNaN => ...
case _ => ...
}
但我认为模式匹配将使用严格的双重比较,所以要小心这个结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)