Wie finde ich das Feld in verschachtelten Fallklassen?

8

Einige verschachtelte Fallklassen mit List -Feldern definiert:

%Vor%

Und ein Beispiel workspace :

%Vor%

Nun möchte ich eine solche Methode schreiben, die ein neues version zu einem doc hinzufügt:

%Vor%

Ich werde wie folgt verwendet:

%Vor%

Ich bin mir nicht sicher, wie ich es elegant umsetzen soll. Ich habe versucht mit Monokel , aber es bietet nicht filter oder find . Meine peinliche Lösung ist:

%Vor%

Gibt es eine bessere Lösung? (Kann beliebige Bibliotheken verwenden, nicht nur monocle )

    
Freewind 28.10.2015, 11:35
quelle

3 Antworten

7

Ich habe gerade Quicklens mit der Methode eachWhere erweitert, um ein solches Szenario zu behandeln. Diese spezielle Methode würde folgendermaßen aussehen:

%Vor%     
adamw 30.10.2015, 10:14
quelle
6

Wir können addNewVersion mit der Optik ziemlich gut implementieren, aber es gibt ein Problem:

%Vor%

Dies funktioniert, aber Sie haben vielleicht bemerkt, dass select Prism nicht von Monocle bereitgestellt wird . Dies liegt daran, dass select die Traversal -Gesetze nicht erfüllt, die für alle t , t.modify(f) compose t.modify(g) == t.modify(f compose g) angeben.

Ein Gegenbeispiel ist:

%Vor%

Die Verwendung von select in workspaceToVersions ist jedoch vollständig gültig, da wir nach einem anderen Feld filtern, das wir modifizieren. Daher können wir das Prädikat nicht ungültig machen.

    
Julien Truffaut 28.10.2015 18:07
quelle
5

Sie können Monocles Index -Typ verwenden, um Ihre Lösung sauberer und allgemeiner zu machen.

%Vor%

Das sagt: Ich weiß, wie man ein Projekt in einem Arbeitsbereich mit einer Zeichenfolge (der Name) und einem Dokument in einem Projekt nach einer Zeichenfolge (dem Pfad) sucht. Du könntest auch Index Instanzen wie Index[List[Project], String, Project] setzen, aber da du List nicht besitzt, ist das wohl nicht ideal.

Als nächstes können Sie ein Optional definieren, das die beiden Suchvorgänge kombiniert:

%Vor%

Und dann deine Methode:

%Vor%

Und du bist fertig. Dies ist nicht wirklich prägnanter als Ihre Implementierung, aber es besteht aus besser zusammensetzbaren Stücken.

    
Travis Brown 28.10.2015 17:25
quelle

Tags und Links