在 Scala 中,为什么模式匹配没有选取 NaN?

2024-02-23

我的方法如下

  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(使用前将#替换为@)

在 Scala 中,为什么模式匹配没有选取 NaN? 的相关文章

随机推荐