2011-10-16 7 views
8

considerar lo siguiente:Scala 2.8 maneja Boolean y java.lang.Boolean correctamente?

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 

La advertencia dice que producirá false pero produce true.

Scala 2.8.

+0

Probablemente no te ayude mucho, pero scala 2.9.1 se comporta como se esperaba. (sin aviso) – Fabian

+0

+1 para lols. Se arregla en 2.9.0 también. Creo que puedes ignorar esta advertencia. –

Respuesta

3

Un poco de arqueología de control de código fuente muestra que el manejo de esas advertencias se mejoró después de 2.8.1. Aquí están las revisiones anotadas de las pruebas unitarias para esas advertencias.

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

Esto se compara con rev 19169 en 2.8.1 final que es mucho más básica:

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

Creo que esto da la sensación de que se proporcionó más atención a esto después de 2.8.1.

Al ver algunos informes de errores, parece que la advertencia es realmente eso, con la esperanza de ayudar a identificar los errores. Si sabe lo que está haciendo (como comparar java Boolean y scala Boolean), puede ignorarlo.

1

Curiosamente, esto ha retrocedido. En las últimas mejoras de advertencia, debo excluir los valores numéricos y la ausencia de booleano. El mensaje de error en trunk para comparar java.lang.Boolean y Boolean es impresionantemente confuso.

+0

Oops, significa que como comentario a la respuesta de huynhjl. – extempore

Cuestiones relacionadas