我的印象是Scala案例類的hashCode完全由其字段決定。因此,我認爲緩存hashCode對於不可變的case類是安全的。具有緩存hashCode的Scala案例類
好像我錯了:
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
誰能解釋這是怎麼回事就在這裏,好嗎?
附錄 - 只爲了比較:
case class Bar(s: String)
val b1 = Bar("bar")
val b2 = Bar("bar")
println(b1.hashCode == b2.hashCode) // TRUE
是的,這是一個很好的解決方案:與基於公共API的實現一樣,行爲好像沒有被覆蓋(即僅基於字段的散列),但是被記憶 - 謝謝! – netzwerg