Wird der var-Mitglieder bei der Klasse beeinflussen Fall Klasse Gleichberechtigung?
Ich habe schwer gemacht Einsatz von case-Klassen in meinem code, Antworten auf die zugrunde liegenden Definitionen von Gleichheit Fall Klasse, richtig zu Verhalten. Dann jetzt fand ich, dass ich hinzufügen müssen, um ein weiteres Feld, Mitglied zu Fall Klasse.
- Also, wenn ich einen
var
Feld Mitglied in Fall Klasse, wird es mess up der Gleichberechtigung-Attribute, für den Fall der Klasse? - Wenn 1 ist ja, wenn ich dann was ändern Sie einfach die
var
Feld Wert, einmal, nachdem, die, ohne jede Umwidmung wird geschehen, bevor der Fall die Klasse geht in eine Sammlung oder zu tun, Gleichheit, Vergleich, werden, dass immer noch Durcheinander der Geschlechter Verhalten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fall die Gleichheit der Klassen richtet sich ausschließlich nach Ihren primären Konstruktor-Attribute, ob Sie
var
oderval
(ja, können Sie machen Sievar
indem Sie eine explizitevar
zu überschreiben stillschweigendval
diesem Fall Konstruktor der Klasse args besitzen.) Hinzufügen von Eigenschaften, die in den Körper einescase class
nicht Einfluss auf die compiler-generiertenequals(other: Any)
Methode.Zeuge:
In der REPL:
Und alle jamie ' s Punkte über die Parallelität gelten, auch.
Es ist nicht so einfach. Sie aktualisieren eine case class var auf einem thread und einem anderen thread ist die Durchführung eine überprüfung auf Gleichheit. Es sei denn, der var ist flüchtig, es ist plausibel, dass die änderung der var nicht an den anderen thread, bevor die überprüfung auf Gleichheit durchgeführt. So hätte man race conditions. Unabhängig davon, ob dies geschieht nur einmal oder viele Male.
Ist der Wert, der geändert werden einmal undefiniert, bis zu diesem Punkt? Wenn dem so ist, verwenden Sie ein lazy val. Es hat eine Synchronisierung Sorge, die könnten langsam high-performance-code, aber sonst erfüllen Sie Ihren Fall.