L'égalité des classes de cas (en particulier dans Scala 2.8) et les codes de hachage sont basés sur l'égalité des tuple et/ou des produits, et ne prennent actuellement pas en compte la classe. Il y a eu une récente discussion à ce sujet sur la liste de diffusion scala-débat ici: http://old.nabble.com/Possible-Collision-Issue-with-Product.hashCode-td27026790.html
Pour ce que ça vaut la peine, voici ce qu'il ressemble actuellement à 2,8:
Welcome to Scala version 2.8.0.Beta1-RC6 (Java HotSpot(TM) Client VM, Java 1.6.0_16).
Type in expressions to have them evaluated.
Type :help for more information.
scala> abstract class C
defined class C
scala> case class CC() extends C
defined class CC
scala> trait T
defined trait T
scala> val c1 = CC()
c1: CC = CC()
scala> val c2 = new CC() with T
c2: CC with T = CC()
scala> println(c1.hashCode == c2.hashCode,c1 equals c2)
(true,true)
C'est un bug, et il a été fixé sur Scala 2.8. –
Ah, c'est un soulagement. Merci à tous pour vos réponses. – user248348