scala case class 相等函数有什么作用?

What does the scala case class equality function do?

根据this,Scala case 类自动生成相等方法。然而:

class SomeCaseClass(val string:String) {}

val a = "123"
assertTrue( a.equals( a ) )  // Passes
assertTrue( new SomeCaseClass(a).equals( new SomeCaseClass(a) ) ) // Fails, Scala 2.10

那么,这个自动生成的 equals 方法有什么用呢?

并非如此class。原来如此class:

scala> case class SomeCaseClass(string: String)
defined class SomeCaseClass

scala> val a = "123"
a: String = 123

scala> SomeCaseClass(a) == SomeCaseClass(a)
res1: Boolean = true

== 只是 equals

的语法糖

在您的示例中,您刚刚在常规对象上调用了 equals(您将获得与 === 相同的结果)(此 equals 不会自动生成),因此它只检查引用相等性。

P.S。您可能会注意到 case class 不需要 new 因为它自动生成了伴生对象。它不需要 val 在构造函数中,因为它默认假定它。 {} 对于常规和大小写都不是强制性的 classess。