This page tiene una descripción del método getOrElseUpdate
el uso del Mapa:¿Cómo almacenar en caché los resultados en 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))
}
esta manera puede utilizar catchedFun1
que comprobará si contiene cacheFun1
valor de la clave y el retorno asociado a él. De lo contrario, invocará fun1
, luego cacheará el resultado cacheFun1
, luego devolverá el resultado fun1
.
Puedo ver un peligro potencial - cacheFun1
puede ser demasiado grande. ¿Entonces el recolector de basura debe limpiar de alguna manera cacheFun1
?
P.S. ¿Qué hay de scala.collection.mutable.WeakHashMap and java.lang.ref.*
?
Probablemente: http: // www. codeinstructions.com/2008/09/weakhashmap-is-not-cache-understanding.html – Debilski