Scala 2.8 правильно обрабатывает Boolean и java.lang. Boolean? - PullRequest
8 голосов
/ 16 октября 2011

Рассмотрим следующее:

scala> val a:java.lang.Boolean = true
a: java.lang.Boolean = true

scala> val b = true
b: Boolean = true

scala> a == b
res4: Boolean = true

scala> b == a
<console>:8: warning: comparing values of types Boolean 
and java.lang.Boolean using `==' will always yield false
       b == a
         ^
res5: Boolean = true

В предупреждении говорится, что оно даст false, но оно даст true.

Scala 2.8.

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Немного археологии управления исходным кодом показывает, что обработка этих предупреждений была улучшена после 2.8.1. Вот аннотированные изменения в модульных тестах для этих предупреждений.

https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/neg/checksensible.scala?annotate=blame&rev=25638

Это сравнивается с версией 19169 в финале 2.8.1, которая намного более проста:

https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_1_final/test/files/neg/checksensible.scala

Я думаю, что это дает ощущение, что больше внимания было уделено этому после 2.8.1.

Глядя на некоторые сообщения об ошибках, кажется, что предупреждение действительно именно так - надеюсь, поможет выявить ошибки. Если вы знаете, что делаете (например, сравниваете Java Java Boolean и Scala Boolean), вы можете проигнорировать.

1 голос
/ 18 октября 2011

Интересно, что это регресс.В последних улучшениях предупреждений я должен исключать цифры и пропущенные логические значения.Сообщение об ошибке в транке для сравнения java.lang.Boolean и Boolean впечатляет путаницей.

...