2011-10-27 12 views
15

Quería preguntar si hay algún tipo de interpolación de cadenas en Scala. He realizado una búsqueda sobre el tema, pero "hasta ahora he encontrado que no hay interpolación de cadenas. ¿Hay planes para implementarse en las próximas versiones?Interpolación de cadenas en Scala?

Gracias!

ACTUALIZACIÓN

interpolación de cadenas va a ser en Scala 2.10 que se puede probar desde Scala 2.10.RC1 está fuera (20/10/2012). Puede consultar este SIP para scala 2.11, que establece que las cadenas interpoladas en el patrón coincidente serán sintaxis válida. Con la nueva interpolación de cadenas se puede hacer algo como esto:

val age = 28 
val name = "Gerry" 

s"My name is $name and I am $age years old" 
res0: String = My name is Gerry and I am 28 years old 

Pero probar el documentation en todos los interpoladores que están disponibles en este momento. Tenga en cuenta que puede definir sus propios interpoladores. Pruebe this link para obtener más información.

+0

http://docs.scala-lang.org/sips/index.html – Debilski

+2

Para completar, el argumento para no tener esas fue que ' "(" + valor + ")"' era sólo un carácter más largo que '' (# {valor}) "' –

+1

posible duplicado de [¿Por qué no hay interpolación de cadenas en Scala?] (http: // stackoverflow.com/questions/2481459/why-is-there-no-string-interpolation-in-scala) –

Respuesta

22

Aún no está en la biblioteca scala (lanzada). Pero hay un SIP (Proceso Scala Mejora) para la incorporación de esta característica:

http://docs.scala-lang.org/sips/pending/string-interpolation.html

+3

También está en trunk (como función experimental): https://lampsvn.epfl.ch/trac/scala/changeset/ 25812/ – tenshi

+0

@tenshi gracias! Iba a verificar si el baúl tenía esto, si tuviera tiempo. –

14

usted puede hacerlo al estilo C:

"Interpolate my %s here" format List(1,2,3) 

//String = Interpolate my List(1, 2, 3) here 

o

List(1,2,3) formatted "Interpolate my %s here" 

Usted puede usar estos en cualquier cosa con un toString (es decir, cualquier cosa)

case class Foo(n: Int) 
Foo(42) formatted "Here is a %s !!!!" 
//String = Here is a Foo(42) !!!! 

aunque el primero es más flexible en términos de permitir múltiples interpolaciones en una sola cadena (ya que puede tomar múltiples argumentos).

7

uso el xml hackear en Scala 2.9

val age = 28 
val name = "Gerry" 

<a>My name is {name} and I am {age} years old</a>.text 
res0: String = My name is Gerry and I am 28 years old 
+2

Esto puede ser viejo, pero es un buen hack! – javadba

0

Este día (2016 Dic, Scala 2.12, cinco años después), puede escribir su propia interpolación de cadenas.
Ver co.ntextu.al

contextual es una pequeña biblioteca Scala, que le permite definir sus propias cadenas literales prefijo-interpoladores de cuerda como uri"https://google.com" que determinan la forma en que deben ser evaluados, en tiempo de ejecución y en tiempo de compilación, mientras que sólo la escritura código de usuario muy ordinario: ¡sin macros!

Por ejemplo, contextual/examples/email.scala permite check at compile time the validity of an email address.

import contextual.examples.email._ 
email"""[email protected]""" 

import contextual.examples.email._ 
email"""[email protected]""" 
Cuestiones relacionadas