2014-06-05 10 views
5

W łańcuchu Scala należy dołączyć dosłowne słowo: \usepackage{x}. Zatem pożądane byłoby, że dlaBłąd ciągów Scala w unicode escape

val s = """ ... \usepackage{X} ... """ 

println(s) 
... \usepackage{X} ... 

Próby dotąd obejmują

scala> """\usepackage{X}""" 
<console>:1: error: error in unicode escape 
     """\usepackage{X}""" 
      ^

scala> raw"""\usepackage{X}""" 
<console>:1: error: error in unicode escape 
     raw"""\usepackage{X}""" 
      ^

Pojedyncze struny podwójnie cytowany okazać nieskuteczne, jak również.

Po http://docs.scala-lang.org/overviews/core/string-interpolation.html, przykładem pracy obejmuje

scala> raw"a\nb" 
res1: String = a\nb 

który nie obejmuje przypadków Unicode.

+0

Jeśli masz odpowiedź, nie edytuj oryginalnego pytania, opublikuj odpowiedź i zaakceptuj ją. –

Odpowiedz

10

Wygląda na to, że masz do czynienia z problemem SI-4706: Unicode literal syntax thwarts common use cases for triple-quotes.

W Scali, sekwencje specjalne Unicode są przetwarzane nie tylko wewnątrz liter znaków lub liter. To może nie być oczywiste, że następujący kod będzie działać:

scala> 5 \u002B 10 
res0: Int = 15 

Niestety, nie wydaje się być dobrym sposobem wokół tego, jeśli nie chcesz, aby wyłączyć całkowicie unicode ucieka (-Xno-uescape). Jednym z obejść sugerowanych w tym wydaniu jest oddzielenie znaku ukośnika odwrotnego:

scala> """\""" + """usepackage{X}""" 
res1: String = \usepackage{X} 
+0

Dzięki za wskazówkę "-Xno-uescape". \ u, nawet w komentarzach powoduje kompilację, aby zawieść. – akauppi

+0

Można również kodować odwrotny ukośnik w standardzie Unicode, a "u": "" "" \ u0075c \ u0075 "" "Prawidłowo podaje" \ u ". – ComFreek

Powiązane problemy