Я только начинаю путешествие по FP, изучая Scala.Неизменяемый способ справиться с состоянием в scala
Теперь необходимо поддерживать List[String]
в нефильтрованном веб-приложении. Когда запрос POST
отправляется на конечную точку, Список должен обновляться из файла. И этот список будет использоваться, когда запрос GET отправляется на ту же конечную точку.
Теперь я стараюсь избегать использования var
для сохранения списка. Я знаю, что иногда нам приходится использовать var, но просто любопытно, что есть элегантный способ справиться с этим делом. Я пробовал использовать scalaz.State Iterator и Steam. Но застрял, так как я понятия не имею, как передать текущее неизменяемое состояние на следующий запрос. Любое предложение, пожалуйста?
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
Тогда я не знаю, как я могу передать текущее состояние следующего визита в качестве входных данных без использования var
.