我的印象是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