【发布时间】:2014-01-26 23:31:42
【问题描述】:
我有:
sealed trait BEValue
case class BEByteString(val value: Array[Byte]) extends BEValue {
def equals(that: BEByteString): Boolean = this.value.deep == that.value.deep
def ==(that: BEByteString) = this equals that
}
case class BEList(val value: List[BEValue]) extends BEValue
BEByteString("spam".getBytes) == BEByteString("spam".getBytes) //true
val l1 = BEList(BEByteString("spam".getBytes):: Nil)
val l2 = BEList(BEByteString("spam".getBytes):: Nil)
l1 == l2 // false. Why ?
【问题讨论】:
-
您可以在 case 类中省略
val关键字。默认添加。 -
我刚刚发布了另一个问题的答案,这是对您问题的更详细的答案。对于(案例)类的实例来说,正确实现 equals 和 hashCode 以在 Scala 集合库中正确运行是至关重要的。或者遭受意想不到的失败。 stackoverflow.com/a/56509518/501113
标签: scala equals case-class