Wie Cache funktionale Programmierung vor
Ein paar Tage mit implementieren kam ich über Rückrufe und Proxy-Muster Implementierung scala verwenden. Dieser Code sollte nur innere Funktion anwenden, wenn der Wert nicht in der Karte ist. Aber jedes Mal Karte neu initialisiert und Werte sind verschwunden (die obivous scheint.Cache mit Hilfe der funktionellen Rückrufe/Proxy-Muster Implementierung scala
Wie gleichen Cache wieder verwenden und wieder zwischen den verschiedenen Funktionsaufrufe
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' außerhalb der Funktion. – Dima