2010-07-26 10 views

Antwort

9

Da Unicode über \u0022 in mehrzeiligen Stringliterale Flucht wird nicht helfen Sie, weil sie als die gleichen drei Angebote bewertet werden würde, ist Ihre einzige Chance, wie so zu verketten ist:

"""Hi, """+"""""""""+"""everyone""" 

die gute Sache ist, dass der scala-Compiler ist intelligent genug, um behebe dies und es wird somit eine einzige Zeichenkette beim Kompilieren entstehen.

Zumindest, das ist, was scala -print sagt.

object o { 
    val s = """Hi, """+"""""""""+"""everyone""" 
    val t = "Hi, \"\"\"everyone" 
} 

und mit scala -print

Main$$anon$1$o.this.s = "Hi, """everyone"; 
Main$$anon$1$o.this.t = "Hi, """everyone"; 

ist jedoch zu beachten, dass Sie es nicht eingegeben auf diese Weise. Das Format scala -print scheint nur für den internen Gebrauch zu sein.

Dennoch könnte es eine einfachere und einfachere Möglichkeit geben, dies zu tun.

2

Sie können nicht

scala Heredocs sind rohe Strings und verwenden Sie keine Escape-Codes , wenn man sie tripple Anführungszeichen in einem String verwenden String-Verkettung hinzufügen müssen

+0

Es gibt keine Escape-Zeichen? Er konnte nicht '/"/"/" '? – wheaties

+0

nein, nicht in einem heredoc string Hinzufügen von \ oder/vor dem "würde hinzufügen" oder "" zum String aber Sie können "in einem normalen String –

2

Sie können die dreifachen Anführungszeichen nicht verwenden, soweit ich weiß. Im spec, Abschnitt 1.3.5 bestimmt:

A mehrzeiligen Stringliteral eine Folge von Zeichen in Anführungszeichen triple "" "... """ eingeschlossen ist. Die Reihenfolge der Zeichen ist willkürlich, außer dass sie nur am Ende drei oder mehr Zitate enthalten kann. Zeichen müssen nicht unbedingt druckbar sein; Zeilenumbrüche oder andere Steuerzeichen sind ebenfalls erlaubt. Unicode-Escapes funktionieren wie überall sonst, aber keine der Escape-Sequenzen in (§1.3.6) wird interpretiert.

Also, wenn Sie drei Anführungszeichen in einem String ausgeben möchten, können Sie immer noch den Apostroph-String mit Entkommen verwenden:


scala> val s = "Hi, \"\"\"everyone" 
s: java.lang.String = Hi, """everyone 
+0

entkommen" Sie könnten auch die Unicode-Escape-Sequenz verwenden. –

+0

Also, es gibt keine Möglichkeit, dies in Heredoc zu tun. Ich verstehe nicht, warum ich es nicht unterstütze. – Freewind

+0

@jhominal: das funktioniert immer noch nicht, wenn Sie die drei Anführungszeichen innerhalb einer mehrzeiligen Zeichenkette einbinden. Es wird immer noch als das Ende des mehrzeiligen String-Literals –

5

Es ist ein totaler Hack, dass ich posted on a similar question, aber es funktioniert auch hier: Verwenden Sie Scala XML-Strukturen als Zwischenformat.

val str = <a>Hi,"""everyone</a> text 

Dadurch erhalten Sie eine Zeichenfolge mit drei doppelten Anführungszeichen.

+0

interpretiert, das ist sehr nützlich, danke – Freewind

+0

Sicher Sache. Ich muss sagen, ich bin ziemlich zufrieden damit. ;-) – pr1001