2011-10-16 18 views
8

Rozważmy następujący:Scala 2.8 obsługuje poprawnie Boolean i java.lang.Boolean?

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 

Ostrzeżenie mówi, że będzie to wydajność false ale daje true.

Scala 2.8.

+0

Prawdopodobnie nie pomoże ci dużo, ale scala 2.9.1 zachowuje się zgodnie z oczekiwaniami. (bez ostrzeżenia) – Fabian

+0

+1 dla loli. Naprawiono także w wersji 2.9.0. Myślę, że możesz zignorować to ostrzeżenie. –

Odpowiedz

3

Trochę archeologii kodu źródłowego pokazuje, że obsługa tych ostrzeżeń została poprawiona po 2.8.1. Oto opisane zmiany testów jednostkowych dla tych ostrzeżeń.

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

ta jest porównywana do rev 19169 w 2.8.1 końcowego, który jest o wiele bardziej podstawowe:

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

Myślę, że to daje poczucie, że więcej uwagi zostały dostarczone do tego po 2.8.1.

Patrząc na niektóre raporty o błędach, wygląda na to, że ostrzeżenie jest tak naprawdę - mam nadzieję, że pomaga zidentyfikować błędy. Jeśli wiesz, co robisz (na przykład porównując java Boolean i scala Boolean), możesz je zignorować.

1

Co ciekawe, sytuacja się zepsuła. W najnowszych ulepszeniach ostrzeżeń muszę wykluczać dane liczbowe i brakujące wartości logiczne. Komunikat o błędzie w trunkingu do porównywania java.lang.Boolean i Boolean jest imponująco mylący.

+0

Ups, oznaczało to jako komentarz do odpowiedzi huynhjl. – extempore