This page ha una descrizione del metodo di getOrElseUpdate
utilizzo di Map:Come memorizzare nella cache i risultati in scala?
object WithCache{
val cacheFun1 = collection.mutable.Map[Int, Int]()
def fun1(i:Int) = i*i
def catchedFun1(i:Int) = cacheFun1.getOrElseUpdate(i, fun1(i))
}
in modo da poter utilizzare catchedFun1
che controllerà se cacheFun1
contiene la chiave e il valore di ritorno ad esso associati. In caso contrario, invierà fun1
, quindi memorizzerà il risultato di fun1
nella cacheFun1
, quindi restituirà il risultato di fun1
.
Posso vedere un potenziale pericolo - cacheFun1
può diventare troppo grande. Quindi cacheFun1
deve essere pulito in qualche modo dal garbage collector?
P.S. Che mi dici di scala.collection.mutable.WeakHashMap and java.lang.ref.*
?
Probabilmente no: http: // www. codeinstructions.com/2008/09/weakhashmap-is-not-cache-understanding.html – Debilski