Simple Scala Syntax - versuchen, "==" Operator zu definieren - was fehlt mir?

8

Während ich mit ein paar Sachen auf der REPL experimentiert habe, kam ich an einen Punkt, an dem ich so etwas brauchte:

%Vor%

Nur eine einfache Klasse mit einem Operator "==".

Warum funktioniert es nicht ???

Hier ist das Ergebnis:

%Vor%

Dies ist scala 2.8 RC1.

Danke

    
Alex R 21.04.2010, 01:42
quelle

2 Antworten

14

Sie müssen die Funktion equals(other:Any):Boolean definieren, dann gibt Scala Ihnen == kostenlos, definiert als

%Vor%

Siehe Kapitel 28 (Objektgleichheit) der Programmierung in Scala für mehr darüber, wie man die equals -Funktion so schreibt, dass es wirklich eine Äquivalenzrelation ist.

Außerdem wird der Parameter x , den Sie an Ihre Klasse übergeben, nicht als Feld gespeichert. Sie müssen es in class A(val x:Int) ... ändern, und dann wird es einen Accessor haben, mit dem Sie auf a.x im Operator equals zugreifen können.

    
Ken Bloom 21.04.2010, 01:57
quelle
7

Die Fehlermeldung ist aufgrund der Übereinstimmung mit einem Code in Predef etwas verwirrend. Aber hier geht es wirklich darum, dass Sie versuchen, die x -Methode für Ihre A -Klasse aufzurufen, aber keine Methode mit diesem Namen ist definiert.

Versuchen:

%Vor%

stattdessen. Diese Syntax macht x zu einem Mitglied von A , komplett mit der üblichen Accessor-Methode.

Wie Ken Bloom erwähnt hat, ist es jedoch eine gute Idee, equals anstelle von == zu überschreiben.

    
David Winslow 21.04.2010 01:59
quelle

Tags und Links