【发布时间】:2011-04-08 18:08:24
【问题描述】:
This page有Map的getOrElseUpdate使用方法的描述:
object WithCache{
val cacheFun1 = collection.mutable.Map[Int, Int]()
def fun1(i:Int) = i*i
def catchedFun1(i:Int) = cacheFun1.getOrElseUpdate(i, fun1(i))
}
所以你可以使用catchedFun1 来检查cacheFun1 是否包含与之关联的键和返回值。否则会调用fun1,然后将fun1的结果缓存到cacheFun1,然后返回fun1的结果。
我可以看到一个潜在的危险 - cacheFun1 可以变得很大。所以cacheFun1 必须由垃圾收集器以某种方式清理?
附: scala.collection.mutable.WeakHashMap and java.lang.ref.* 呢?
【问题讨论】: