Как реализовать кэш с помощью функционального программирования
Несколько дней назад я наткнулся на обратные вызовы и прокси-образов реализации с помощью Scala. Этот код должен применять только внутреннюю функцию, если значение отсутствует на карте. Но каждый раз, когда карта инициализируется и ценности ушли (что кажется obivous.кэша с помощью функциональных обратных вызовов/прокси-модель реализации 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
}
Put 'cache' вне функции. – Dima