"subclases" de AnyVal
no se comportan adecuadamente desde una perspectiva de hash:
scala> 1.0.hashCode
res14: Int = 1072693248
Por supuesto, esto es en caja a una llamada a:
scala> new java.lang.Double(1.0).hashCode
res16: Int = 1072693248
Podríamos preferimos que sea :
scala> new java.lang.Double(1.0).##
res17: Int = 1
scala> 1.0.##
res15: Int = 1
Deberíamos e xpect this dado que el int
1 es también el double
1. Por supuesto, este problema no se presenta en Java. Sin ella, no tendríamos este problema:
Set(1.0) contains 1 //compiles but is false
suerte:
scala> Set(1.0) contains 1
res21: Boolean = true
'1.0 hashCode' v' 1.0 ## '' v 1 hashCode' v '1 ##' - http://www.scala-lang.org/api/current/ scala/Any.html – Debilski
Un poco offtopic, pero puedes buscar esos símbolos usando [SymbolHound] (http://www.symbolhound.com/). –
Ah bien. Entonces, '1.hashCode'' == '' 1. ## ', y' 1.2.hashCode' '==' '1.2. ##'. Lo único que se comporta de manera diferente es '1.0.hashCode''! = '' 1.0. ## '(entonces' ## 'es más adecuado para comparar números). –