2011-10-16 12 views
8

Si consideri il seguente:Scala 2.8 gestisce correttamente Boolean e 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 

L'avviso dice che produrrà false ma produce true.

Scala 2.8.

+0

Probabilmente non ti aiuterà molto ma scala 2.9.1 si comporta come previsto. (nessun avviso) – Fabian

+0

+1 per lols. È stato risolto anche in 2.9.0. Penso che tu possa ignorare questo avvertimento. –

risposta

3

Un po 'di archeologia di controllo del codice sorgente mostra che la gestione di tali avvisi è stata migliorata dopo 2.8.1. Ecco le revisioni annotate ai test unitari per tali avvertimenti.

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

Questo è rispetto al rev 19169 in 2.8.1 finale che è molto più semplice:

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

Penso che questo dà un senso che più attenzione è stata fornita a questo dopo 2.8.1.

Osservando alcune segnalazioni di bug, sembra che l'avvertimento sia proprio questo - si spera che aiuti a identificare gli errori. Se sai cosa stai facendo (come confrontare java booleano e scala booleano), puoi ignorarlo.

1

È interessante notare che questo è regredito. In recenti miglioramenti di avviso devo escludere i numeri e il booleano mancante. Il messaggio di errore nel trunk per confrontare java.lang.Boolean e Boolean è impressionantemente confuso.

+0

Oops, intendeva quello come un commento alla risposta di huynhjl. – extempore