Estoy tratando de crear una clase que tenga un mapa de teclas -> llamadas de función, y el siguiente código no se comporta como me gustaría.¿Es posible tener un mapa de {tecla -> llamada de función} en Scala?
class MyClass {
val rnd = scala.util.Random
def method1():Double = {
rnd.nextDouble
}
def method2():Double = {
rnd.nextDouble
}
def method3():Double = {
rnd.nextDouble
}
def method4():Double = {
rnd.nextDouble
}
def method5():Double = {
rnd.nextDouble
}
var m = Map[String,Double]()
m += {"key1"-> method1}
m += {"key2"-> method2}
m += {"key3"-> method3}
m += {"key4"-> method4}
m += {"key5"-> method5}
def computeValues(keyList:List[String]):Map[String,Double] = {
var map = Map[String,Double]()
keyList.foreach(factor => {
val value = m(factor)
map += {factor -> value}
})
map
}
}
object Test {
def main(args : Array[String]) {
val b = new MyClass
for(i<-0 until 3) {
val computedValues = b.computeValues(List("key1","key4"))
computedValues.foreach(element => println(element._2))
}
}
}
La siguiente salida
0.022303440910331762
0.8557634244639081
0.022303440910331762
0.8557634244639081
0.022303440910331762
0.8557634244639081
indica que una vez que la función se coloca en el mapa, es un ejemplo congelado (cada tecla producir el mismo valor para cada pasada). El comportamiento que me gustaría ver es que la clave se referiría a una llamada a función, generando un nuevo valor aleatorio en lugar de simplemente devolver la instancia contenida en el mapa.
por qué tantas funciones idénticas? –
@Pablo. Son solo marcadores de posición de ejemplo para las funciones que REALMENTE implementaré. Quería tener un universo de funciones potenciales para llamar y solo llamar a un subconjunto de ellas. –