Scala集合包含不使用==?

Jus*_*s12 1 collections scala

请考虑以下代码:

scala> case class Foo(s:String, t:String, r:String) {
     |    def == (f:Foo) = s == f.s && t == f.t
     | }
defined class Foo

scala> val f1 = Foo("s", "t", "r")
f1: Foo = Foo(s,t,r)

scala> val f2 = Foo("s", "t", "r1")
f2: Foo = Foo(s,t,r1)

scala> f1 == f2
res24: Boolean = true

scala> Array(f1) contains (f2)
res25: Boolean = false
Run Code Online (Sandbox Code Playgroud)

我的印象是contains使用==上面定义的.我误会了吗?

版本:Scala-2-10-2

dre*_*xin 7

问题是,您没有覆盖,但重载==方法.它必须被定义为def == (a: Any): Boolean,因为在java和scala中你可以比较任何两个对象.但在案例类中,这种方法是最终的.但是equals,您可以使用相同的签名覆盖,因为==它只是一个别名equals.但是应该避免在case类中重写这些方法,因为case类的相等定义是,两个实例上的每个值都必须相等.