2011-10-27 8 views
15

Volevo chiedere se c'è un tipo di interpolazione di stringa in Scala. Ho fatto una ricerca sull'argomento ma 'fino ad ora ho scoperto che non c'è interpolazione di stringa. C'è intenzione di essere implementato nelle prossime versioni?Interpolazione stringa in Scala?

Grazie!

UPDATE

String interpolazione sta per essere in scala 2.10, che si può provare a partire dal Scala 2.10.RC1 è fuori (20/10/2012). È possibile controllare questo SIP per scala 2.11 in cui si afferma che le stringhe interpolate nel modello di corrispondenza saranno una sintassi valida. Con la nuova interpolazione stringa si può fare qualcosa di simile:

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 

Ma provare il documentation su tutti i interpolatori che sono disponibili al momento. Nota che puoi definire i tuoi interpolatori! Prova this link per maggiori informazioni.

+0

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

+2

Per completezza, l'argomento per non avere chi era che ' "(" + Valore + ")"' è stato solo un carattere più di '" (# {valore}) "' –

+1

possibile duplicato di [Perché non c'è interpolazione di stringa in Scala?] (http: // StackOverflow.it/questions/2481459/why-is-there-no-string-interpolation-in-scala) –

risposta

22

Non è ancora nella libreria di scala (rilasciata). Ma c'è un SIP (Scala Improvement Process) per l'aggiunta di questa funzionalità:

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

+3

Anche nel bagagliaio (funzione sperimentale): https://lampsvn.epfl.ch/trac/scala/changeset/ 25812/ – tenshi

+0

@tenshi grazie! Stavo per controllare se il tronco avesse questo, se avessi avuto il tempo. –

14

è possibile farlo in stile 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" 

È può usarli su qualsiasi cosa con un toString (ad esempio qualsiasi cosa)

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

sebbene il primo sia più flessibile in termini di abilitazione di più interpolazioni in una singola stringa (poiché può richiedere più argomenti).

7

Io uso il xml incidere su 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

Questo potrebbe essere vecchio, ma è un bel trucco! – javadba

0

Questo giorni (dicembre 2016, Scala 2.12, cinque anni dopo), è possibile scrivere la propria interpolazione delle stringhe.
Vedi co.ntextu.al

contestuale è una piccola libreria Scala, che consente di definire le proprie stringhe letterali stringa interpolatori-prefissati come uri"https://google.com" che determinano il modo in cui dovrebbero essere valutati, in fase di esecuzione e al momento della compilazione, mentre solo la scrittura codice utente molto comune: nessuna macro!

Ad esempio, contextual/examples/email.scala consente di check at compile time the validity of an email address.

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

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