Angenommen, ich habe ein paar verschachtelte Funktoren, z.B. List[Option[Int]]
und muss die map
der innersten% aufrufen.
Jetzt verwende ich verschachtelte maps
:
Was ist, wenn ich zum Beispiel 3 Verschachtelungsebenen habe?
Gibt es eine einfache Alternative zu verschachtelten maps
?
Ja, das ist mit scalaz.Functor möglich:
%Vor% Dies ist jedoch länger als einfach map
mit einem verschachtelten map
aufzurufen. Wenn Sie häufig verschachtelte Strukturen zuordnen, können Sie Hilfsfunktionen erstellen:
Verwendung:
%Vor%Wenn Sie viele verschachtelte Funktoren haben und diese nicht abflachen möchten (d. h. sie sind keine Monaden oder Sie möchten sie nicht als Monaden verwenden), dann können Linsen helfen. Es gibt eine Quicklens-Implementierung, die traversierbare Linsen unterstützt: Ссылка .
Beispiel (Sorry hat nicht versucht, es zu kompilieren):
%Vor%Wie auch immer, Sie müssen die Verschachtelungsebene angeben, aber Sie müssen hier keine Verschachtelung durchführen. Und es ist genug, es einmal zu spezifizieren, wie (konzeptionelles Beispiel, nicht überprüft):
%Vor% Aus der Frage, die ich verstanden habe, binden Sie den Listen-Iterator e.i. Entfernen Sie die oberen Listenebenen. In diesem Fall können Sie flatten
verwenden, um eine Liste von Listen in eine einzige Liste zu konvertieren.
Ich werde einige Schichten der Liste mit flatten
Code: -
%Vor%Ergebnisse: -
%Vor%