编译器构造 – Scala:比较新鲜对象
发布时间:2020-12-16 09:08:26 所属栏目:安全 来源:网络整理
导读:我正在浏览 scala测试,我不明白为什么编译器在比较“两个新鲜对象”时会产生警告. 这是测试’输出: http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/neg/checksensible.check 例: checksensible.scala:12: warning: comparing a fresh
我正在浏览
scala测试,我不明白为什么编译器在比较“两个新鲜对象”时会产生警告.
这是测试’输出: 例: checksensible.scala:12: warning: comparing a fresh object using `!=' will always yield true println(new Exception() != new Exception()) ^ 如果我编写一个实现==方法的类,它也会产生这个警告: class Foo(val bar: Int) { def ==(other: Foo) : Boolean = this.bar == other.bar } new Foo(1) == new Foo(1) warning: comparing a fresh object using `==' will always yield false 编辑:谢谢oxbow_lakes,我必须覆盖equals方法,而不是== class Foo(val bar: Int) { override def equals(other: Any) : Boolean = other match { case other: Foo => this.bar == other.bar case _ => false } } 解决方法
请注意,您永远不应该覆盖==方法(您应该覆盖equals方法).我假设通过一个新对象,Scala意味着没有定义的equals方法的新对象.
如果不重写equals,则==比较是参考比较(即使用eq),因此: new F() == new F() 永远都是假的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |