Как реализовать кеш с помощью функционального программирования
Несколько дней назад я наткнулся на обратные вызовы и реализацию шаблона прокси с помощью scala. Этот код должен применять внутреннюю функцию только в том случае, если значение отсутствует на карте. Но каждый раз, когда карта переинициализируется и значения исчезают (что кажется очевидным.
Как снова и снова использовать один и тот же кеш между вызовами разных функций
class Aggregator{
def memoize(function: Function[Int, Int] ):Function[Int,Int] = {
val cache = HashMap[Int, Int]()
(t:Int) => {
if (!cache.contains(t)) {
println("Evaluating..."+t)
val r = function.apply(t);
cache.put(t,r)
r
}
else
{
cache.get(t).get;
}
}
}
def memoizedDoubler = memoize( (key:Int) => {
println("Evaluating...")
key*2
})
}
object Aggregator {
def main( args: Array[String] ) {
val agg = new Aggregator()
agg.memoizedDoubler(2)
agg.memoizedDoubler(2)// It should not evaluate again but does
agg.memoizedDoubler(3)
agg.memoizedDoubler(3)// It should not evaluate again but does
}
cache
вне функции. - person Dima   schedule 12.04.2016