gpt4 book ai didi

compiler-construction - Scala:比较新鲜的对象

转载 作者:行者123 更新时间:2023-12-04 08:37:24 25 4
gpt4 key购买 nike

我正在浏览 Scala 测试,但我不明白为什么在比较“两个新对象”时编译器会产生警告。

这是测试的输出:
http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/neg/checksensible.check

例子:

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()

永远是假的。

关于compiler-construction - Scala:比较新鲜的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com