Ответ 1
Это общее правило, согласно которому сравниваются 64-битные числа с плавающей запятой в соответствии с IEEE 754 (не Scala или даже связанные с Java, см. NaN)
double n1 = Double.NaN;
double n2 = Double.NaN;
System.out.println(n1 == n2); //false
Идея состоит в том, что NaN
- значение маркера для неизвестного или неопределенного. Сравнение двух неизвестных значений всегда должно давать false
, поскольку они хорошо... неизвестны.
Если вы хотите использовать сопоставление образцов с NaN
, попробуйте следующее:
myDouble match {
case x if x.isNaN => ...
case _ => ...
}
Но я думаю, что совпадение шаблонов будет использовать строгое двойное сравнение, поэтому будьте осторожны с этой конструкцией.