2011-10-10 12 views
7

¿Existe una sintaxis breve para la interpolación de cadenas en Scala? Algo así como:Abreviatura de String.format en Scala

"my name is %s" < "jhonny" 

En lugar de

"my name is %s" format "jhonny" 
+1

de nuevas palabras de vocabulario para usted: la interpolación de cadenas (aprendí que uno hace poco yo). –

+0

oh, gracias. Lo agregaré a la pregunta. –

+1

Sí, encontré esto también: http://stackoverflow.com/questions/2481459/why-is-there-no-string-interpolation-in-scala –

Respuesta

9

No, pero puede agregar usted mismo:

scala> implicit def betterString(s:String) = new { def %(as:Any*)=s.format(as:_*) } 
betterString: (s: String)java.lang.Object{def %(as: Any*): String} 

scala> "%s" % "hello" 
res3: String = hello 

Tenga en cuenta que no se puede utilizar <, porque eso sería entrar en conflicto con una diferente conversión implícita ya definida en Predef.

3

Me parece recordar que Martin Odersky fue citado al afirmar que la concatenación de cadenas en el estilo presentado en "Programación en Scala" es una aproximación útil para la interpolación. La idea es que sin espacios solo use unos pocos caracteres adicionales por sustitución. Por ejemplo:

val x  = "Mork" 
val y  = "Ork" 

val intro = "my name is"+x+", I come from "+y 

Sin embargo, el método de formato proporciona mucha más potencia. Daniel Sobral también ha blogueado en una técnica de regex based.

+0

El problema con la concatenación es que a veces se pierde la 'vista' de toda la cadena. p.ej. El formato "% s: //% s" (protocolo, host) se ve más limpio para mí. –

4

En caso de que usted se está preguntando qué sintaxis puede estar en las obras

$ ./scala -nobootcp -Xexperimental 
Welcome to Scala version 2.10.0.r25815-b20111011020241 

scala> val s = "jhonny" 
s: String = jhonny 

scala> "my name is \{ s }" 
res0: String = my name is jhonny 

Jugando un poco más:

scala> "those things \{ "ne\{ "ts".reverse }" }" 
res9: String = those things nest 

scala> println("Hello \{ readLine("Who am I speaking to?") }") 
Who am I speaking to?[typed Bozo here]Hello Bozo