我剛剛開始學習Scala時開始了我的FP旅程。在scala中處理狀態的不可變方式
現在需要在未過濾的Web應用程序中保留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
。