==用于案例类和Scala中的“非案例”类
我正在研究
Scala并遇到了以下难题.
我可以定义以下案例类: abstract class Expr case class Number(n: Int) extends Expr 当我从类Number创建两个实例并进行比较时 val x1 = Number(1) val x2 = Number(1) x1 == x2 我有以下结果:
所以x1和x2是相同的. 但是,如果我在Number类定义中删除case修饰符,即 abstract class Expr class Number(n: Int) extends Expr 然后以相同的方式比较Number类中的两个实例 val x1 = new Number(1) val x2 = new Number(1) x1 == x2 我有以下输出:
它说这次x1和x2是不同的. 你能告诉我这是为什么吗?在比较两个实例方面,案例有何不同? 谢谢, 解决方法
在Scala中定义case类时,编译器会生成一个equals方法,用于检查深度相等(即类的内容).
来自:http://www.scala-lang.org/old/node/107
删除case关键字时,会生成常规类,并对它们执行==检查以获得引用(浅)相等性.由于您要比较类的两个唯一实例,因此即使它们的内容相同,它们也会失败引用相等性. 对于浅层和深层平等之间的区别,请参阅: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |