我的印象是Scala案例类的hashCode完全由其字段决定.因此,我认为缓存hashCode对于不可变的case类是安全的.
好像我错了:
case class Foo(s: String) {
override val hashCode: Int = super.hashCode()
}
val f1 = Foo("foo")
val f2 = Foo("foo")
println(f1.hashCode == f2.hashCode) // FALSE
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这里发生了什么,拜托?
附录 - 仅供比较:
case class Bar(s: String)
val b1 = Bar("bar")
val b2 = Bar("bar")
println(b1.hashCode == b2.hashCode) // TRUE
Run Code Online (Sandbox Code Playgroud)
Alv*_*sco 10
不确定这个的价值,但你可以内联实现ScalaRuntime._hashCode:
case class Foo(s: String) {
override val hashCode: Int = scala.util.hashing.MurmurHash3.productHash(this)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |