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。
根据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。