Scala Namenskonvention für "Setter" auf unveränderlichen Objekten

8

Ich weiß nicht, wie ich meine "Setter" bei unveränderlichen Objekten nennen soll.

Für eine veränderbare Objektperson funktionieren die Setter folgendermaßen:

%Vor%

Das ist alles gut und gut, aber was ist wenn Person unveränderlich ist?

%Vor%

Was soll whatHereName heißen?

BEARBEITEN: Ich muss Sachen in die "Setter" -Methode setzen, so:

%Vor%

Der echte Code ist viel größer als dieser, daher reicht ein einfacher Aufruf der Methode copy nicht aus.

EDIT 2:

Da es so viele Kommentare zu meinem gefälschten Beispiel gibt (das ist falsch), gebe ich Ihnen besser die link zu der realen Klasse ( Avatar ).

Die "Setter" -Methoden, die ich nicht kenne, sind updateStrength , updateWisdom ... aber ich werde das wahrscheinlich in withStrength bald ändern ..

    
olle kullberg 20.10.2010, 09:44
quelle

7 Antworten

12

Ich mag den jodatime Weg. das wäre mitName.

%Vor%

mehr jodatime Beispiele: Ссылка

    
Mikael Sundberg 20.10.2010, 09:54
quelle
10

Scala-Fallklassen haben zu diesem Zweck eine automatisch generierte Methode kopieren . Es wird so benutzt: %pr_e%

    
Oleg Galako 20.10.2010 10:14
quelle
4

Wenn Sie beim Ändern eines Felds eine Validierung usw. durchführen müssen, sollte sich dies bei der ersten Erstellung des Objekts von der Validierung unterscheiden ?

In diesem Fall können Sie dann im Konstruktor einer Fallklasse die erforderliche Validierungs / Fehler-Werbelogik einfügen, die immer dann verwendet wird, wenn eine neue Instanz über die Methode copy erstellt wird.

    
Kevin Wright 20.10.2010 12:52
quelle
3

Sie könnten dafür eine einzige Methode definieren. Entweder copy oder, falls es sich bereits um eine Fallklasse handelt, with :

%Vor%

BEARBEITEN

Die Methode copy im verknüpften Beispiel sollte folgendermaßen aussehen:

%Vor%     
Daniel C. Sobral 20.10.2010 13:05
quelle
2

Hinzufügen zu Oleg Antwort, würden Sie die Klasse wie folgt schreiben:

%Vor%

Sie würden es so verwenden:

%Vor%

Die oben beschriebene Kopiermethode ist möglich, aber in Ihrem einfachen Fall würde ich einfach verwenden:

%Vor%

Die Kopiermethoden zeigen ihre Stärken, wenn Sie Klassen haben wie:

%Vor%     
soc 20.10.2010 11:05
quelle
1

Zur Zeit verwende ich update<Field> name Konvention für alle "Setter" -ähnlichen Methoden auf unveränderliche Objekte.

Ich kann set<Field> nicht verwenden, da es zu sehr an die veränderbaren Setter in Java erinnert.

Wie findest du update<Field> für alle Methoden, die eine neue Instanz derselben Identität wie die aktuelle Instanz zurückgeben?

    
olle kullberg 20.10.2010 11:53
quelle
0

Obwohl vorherige Antworten das Problem lösen, würde ich gerne erzählen, wie ich mit unveränderlichen Objekten (die nur syntaktischer Zucker sind) umgehen kann.

Um eine klarere Syntax (IMHO) zu erhalten, implementiere ich die Methode apply in unveränderlichen Klassen und gebe das Ergebnis der Methode copy in Fallklassen und einer neuen Instanz zurück, wenn es sich um eine reguläre Klasse handelt. zB:

%Vor%

Dies macht die "mutator" -Methode zur Standardmethode für jede Instanz dieser Klasse.

    
jamming 27.12.2013 13:40
quelle

Tags und Links