我想在沒有var定義的情況下實現定期更新的值。如何在沒有var定義的情況下定義更新值scala
比方說,如果我有Web服務器,必須做其他服務器的健康檢查,以處理用戶請求。每個用戶請求操作都會引用健康檢查結果。 如果每次處理新請求時進行健康狀況檢查,則會花費巨大的費用,而是每5分鐘最多更新一次健康狀況檢查結果值。
這很簡單如果我使用var
來實現這一點。
private var result = false
private var lastUpdated = 0L
private val INTERVAL = 1000L * 60 * 5
def helthCheckResult = {
System.currentTimeMillis() match {
case currentTime if currentTime > lastUpdated + INTERVAL =>
result = !result // actual code should call heathcheck impl
lastUpdated = currentTime
result
case _ =>
result
}
}
或阿卡
class HeathCheckActor(implicit system: ActorSystem) extends Actor {
private var result = false
system.scheduler.schedule(0 seconds,5 minutes,self,"update")
def receive = {
case "update" if sender == self =>
result = !result // actual code should call heathcheck impl
case "get" =>
sender ! result
}
}
他們使用var
持有導致狀態。我想實現的是不用var
。
有沒有辦法做到這一點?
任何類型的信息/提示將不勝感激。
編輯
這是有點壞榜樣問我想達到的目標。 比方說,如果result
不是簡單的finate狀態,如Boolean
,但Int
。 result
可以是Int雲代表的任何值。 換句話說,Akka FSM這樣的東西不能使用。
感謝您的回答。你能否提供代碼,這是持有價值的地方?我感覺你的代碼只是將'var'移動到其他地方。 – suish