2010-03-20 6 views
11

Questa non è solo una battuta oziosa ... Mi chiedo se qualcuno sa se esiste un motivo di progettazione reale perché Scala non supporta l'interpolazione simile a Groovy e ad altri "Javas sintatticamente migliori"?Perché non c'è interpolazione di stringa in Scala?

ad es.

 
var str1 = "World"; 
var str2 = "Hello, ${str1}"; 
+0

Questa domanda è simile a http://stackoverflow.com/ domande/2183503/sostituti-valori-in-a-stringa-con-segnaposti-in-scala/2189134 con risposte molto diverse. –

+0

@Mitch: Non è la stessa domanda. L'altro richiedente voleva sapere come farlo; Volevo conoscere la logica alla base della decisione dei progettisti della Scala, a cui è stata data una buona risposta in seguito. –

+1

C'è ora (Scala 2.10 Interpolazione a Corde): 's" Ciao, $ str1 "' (http://docs.scala-lang.org/overviews/core/string-interpolation.html) –

risposta

16

La soluzione proposta è di omettere gli spazi quando si utilizza +.

"a="+a+", b="+b 

E 'stato suggested che un layout di tastiera svizzero rende questo molto naturale a digitare, in modo che i creatori di Scala non si sentono abbastanza dolore per giustificare complicare il langauge in questa direzione :)

+1

All'inizio pensavo che la "tastiera svizzera" fosse uno scherzo, ma dopo aver letto l'articolo collegato ho deciso di scegliere questa come migliore risposta! Grazie per aver raggiunto il cuore della mia domanda che era "PERCHÉ ??" questa caratteristica manca a Scala. –

+10

OMG questo è terribile. –

7

si è ritenuto che la complessità del compilatore in più che deriverebbe da non valeva la pena i guadagni per essere avuto da un lato, e, d'altra parte, che la sua assenza non sarebbe eccessivamente oneroso.

1

Scala ha una funzionalità simile per XML:

val x = doSomeCrazyCalculation 
val xml = <foo>{x}</foo> 
7

ho capito la sensazione è che String interpolazione non è necessaria, perché non è molto più conciso di concatenazione:

val str2 = "Hello, ${str1}!" 
val str2 = "Hello, "+str1+"!" 

sostenendo che la L'operatore "+" su Stringhe deve essere formattato senza spazio, Martin Odersky says,

Con la nuova convenzione, la necessità di sostituire le stringhe (spesso proposta nelle liste di Scala) scompare quasi del tutto. Confronta:

"test results: ${result1}, ${result2}" 

con la prima versione di cui sopra. Hai salvato un carattere per la sostituzione di , a malapena vale una nuova convenzione di sintassi. In altre parole, la sintassi sostituzione di stringhe di Scala è scritto

"+...+" 

invece di

${...} 

o qualche altra proposta simile. D'altra parte, se insisti sugli spazi attorno al +, la storia diventa molto meno convincente.

Per inciso, vedere il post del blog "String Interpolation in Scala" dove viene emulato utilizzando il riflesso.

+1

Daniel (che ha dato il primo rispondi qui ed è apparentemente troppo modesto per promuoverlo) ha prodotto anche una soluzione (http://dcsobral.blogspot.com/2010/01/string-interpolation-in-scala-with.html). Si noti che richiede una versione successiva a Scala 2.8.0.Beta1. –

+2

Hanno un buon punto ... sono solo 4 caratteri contro 3. Quale sarebbe bello è una modifica IDE Eclipse per evidenziare "+ ... +" in modo diverso dal normale inizio/fine della stringa! –

+8

Non penso che il confronto sia valido nel caso generale. Se è necessario interpolare un'espressione, il confronto dovrebbe essere: '" 1 + 1 = \ {1 + 1}! "' (13 caratteri) vs '" 1 + 1 = "+ (1 + 1) +"! " '(16 caratteri) –

Problemi correlati