2011-03-27 9 views
5

Estoy comenzando Scala y estoy haciendo las cosas de manera más funcional.Scala - modificación de la cadena de una manera funcional

preguntando si hay una manera más funcional para lograr algo como lo siguiente:

def expand(exp: String): String = { 
    var result = exp 
    for ((k,v) <- libMap) {result = result.replace(k, "(%s)".format(v))} 
    result 
} 

O en términos generales, dada una cadena y alguna colección iterable, ir a través de la recolección y para cada elemento, de forma incremental modificar la cadena de entrada.

Saludos

Respuesta

8

En general, el patrón de

var result = init 
for (foo <- bar) { result = f(result, foo)} 
result 

pueden expresarse funcionalmente como

bar.foldLeft(init)(f) 

Así que para su caso esta becomas:

libMap.foldLeft(exp){ case(result, (k,v)) => result.replace(k, "(%s)".format(v))} 
Cuestiones relacionadas