私はScalaを学んでいる間にFPの旅を始めます。スカラの状態を処理する不変の方法
フィルタリングされていない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
を使用せずに入力として、次の訪問に現在の状態を渡すことができるのか分かりません。