Je viens de commencer mon voyage FP tout en apprenant Scala.Manière immuable de gérer l'état dans Scala
Maintenant, une exigence est de maintenir un List[String]
dans une application Web non filtrée. Lorsqu'une demande POST
est envoyée à un point de terminaison, la liste doit être mise à jour à partir d'un fichier. Et la liste sera utilisée lorsqu'une requête GET est envoyée au même point de terminaison.
Maintenant, j'essaie d'éviter d'utiliser var
pour enregistrer la liste. Je sais parfois que nous devons utiliser var mais juste curieux qu'il y a une manière élégante de traiter l'affaire. J'ai essayé d'utiliser scalaz.State Iterator et Steam. Mais je me suis coincé puisque je n'ai aucune idée de comment passer l'état immuable actuel à la prochaine requête. Toute suggestion, s'il vous plaît?
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
Alors je ne sais pas comment puis-je passer l'état actuel à la prochaine visite en entrée sans utiliser var
.