Ich habe eine Eigenschaft, für die ich weiß, dass Referenzgleichheit ist nie die korrekte Implementierung von equals
. Implementierungen des Merkmals können von vielen Benutzern geschrieben werden, und die Praxis zeigt, dass sie es manchmal nicht schaffen, equals
zu überschreiben. Gibt es eine Möglichkeit, es zu verlangen?Erzwingen alle Implementierungen eines Merkmals zu überschreiben ist gleich
In der Praxis Implementierungen sind in der Regel Fallklassen, die Überschreibung equals
automatisch, und wir nähern können, indem Product
als Selbst Typ des Merkmals dass erfordern, würde ich aber gerne eine Lösung finden, die nicht erlaubt - Fallklassen überschreiben auch equals
(BEARBEITEN: Verwenden scala.Equals
als der Selbst-Typ ist eine nähere Annäherung an das, was ich will, da es immer noch von Fall-Klassen implementiert wird, aber nützlich sein kann durch nicht-Fall-Klassen und ist kein große Belastung für Leute, die Implementierungen schreiben).
Ein weiterer Ansatz, an den ich beim Schreiben dieser Frage gedacht habe, ist das Überschreiben equals
im Merkmal, um eine abstrakte Methode aufzurufen, aber das funktioniert leider nicht für Fallklassenimplementierungen.
Was - Merkmal Foo { Überschreibung def gleich (obj: scala. Beliebig): Boolesch = ??? } – Maxim
Können Sie mehr über _does nicht für Fallklassenimplementierungen_ beschreiben? [Dieses Arbeitsblatt] (https://gist.github.com/Odomontois/865d91180cc2e30435bf) funktionierte gut für mich – Odomontois
@Maxim Das Problem ist, dass wenn "Equals" in einem Vorgänger einer Fallklasse neu definiert wird, die Implementierung nicht generiert wird. –