Je passais en revue les tests de scala et je ne comprends pas pourquoi le compilateur produit un avertissement lorsque vous comparez "deux nouveaux objets".Scala: comparer des objets frais
C'est le test » sorties: http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/test/files/neg/checksensible.check
Exemple:
checksensible.scala:12: warning: comparing a fresh object using `!=' will always yield true
println(new Exception() != new Exception())
^
Si j'écris une classe qui implémente une méthode ==
elle produit aussi cet avertissement:
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
EDIT: Merci oxbow_lakes, je dois passer outre la metho égale d, pas le ==
class Foo(val bar: Int) {
override def equals(other: Any) : Boolean = other match {
case other: Foo => this.bar == other.bar
case _ => false
}
}
Ceci n'est apparemment pas vrai pour les classes de cas, où Scala effectue une vérification d'égalité extensionnelle par défaut. PAR EXEMPLE. "case class F(); println (nouveau F() == new F())" –
Pour les classes de cas "égal à" _is_ substitué. –