Ich beginne gerade meine FP-Reise beim Lernen von Scala.Unveränderliche Art, den Zustand in scala zu behandeln
Jetzt muss eine List[String]
in einer ungefilterten Webanwendung gepflegt werden. Wenn eine POST
Anfrage an einen Endpunkt gesendet wird, sollte die Liste aus einer Datei aktualisiert werden. Und die Liste wird verwendet, wenn eine GET-Anfrage an denselben Endpunkt gesendet wird.
Jetzt versuche ich zu vermeiden, var
zum Speichern der Liste zu verwenden. Ich weiß manchmal, dass wir var verwenden müssen, aber nur neugierig, dass es eine elegante Möglichkeit gibt, mit dem Fall umzugehen. Ich habe versucht mit scalaz.State Iterator und Steam. Aber stecken geblieben, da ich keine Ahnung habe, wie man den aktuellen unveränderlichen Zustand an die nächste Anfrage weitergibt. Irgendein Vorschlag, bitte?
def update = State(l => {
retrieve(filepath) match {
case Success(lines) => (lines.split("[,\n\r]").toVector.map (_.trim), true)
case Failure(_) => {
log.error(s"Cannot retrieve the file.")
(l, false)
}
}
})
def isContained(message: String) = State(l => (l, l.exists(message.contains)))
/* assume the following get or post method will be invoked when GET or POST request is sent to the endpoint */
def post() = update(Vector.empty) // how can I pass the updated state to the get method
def get(msg: String): Boolean = isContained(msg)(???)._2
Dann weiß ich nicht, wie kann ich den aktuellen Zustand auf den nächsten Besuch als Eingabe ohne var
passieren.