«Подклассы» AnyVal
не ведут себя должным образом с точки зрения хеширования:
scala> 1.0.hashCode
res14: Int = 1072693248
Конечно, это связано с звонком на:
scala> new java.lang.Double(1.0).hashCode
res16: Int = 1072693248
Мы могли бы предпочесть, чтобы это было:
scala> new java.lang.Double(1.0).##
res17: Int = 1
scala> 1.0.##
res15: Int = 1
Мы должны ожидать этого, учитывая, что int
1 также является double
1. Конечно, эта проблема не возникает в Java. Без него у нас была бы эта проблема:
Set(1.0) contains 1 //compiles but is false
К счастью:
scala> Set(1.0) contains 1
res21: Boolean = true