2014-06-05 13 views
5

在斯卡拉字符串需要包括這個逐字逐字:\usepackage{x}。因此,期望的是,對於scala原始字符串錯誤unicode轉義

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

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

嘗試到目前爲止,包括,

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}""" 
      ^

單雙引號字符串證明不成功也是如此。

http://docs.scala-lang.org/overviews/core/string-interpolation.html,工作示例包括

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

不包括Unicode的情況下。

+0

如果你有一個答案,不修改自己原來的問題,發佈的答案和接受它。 –

回答

10

您似乎面臨問題SI-4706: Unicode literal syntax thwarts common use cases for triple-quotes

在Scala中,unicode轉義序列不僅在字符或字符串文字中進行處理。它可能不是很明顯的是,下面的代碼將工作:

scala> 5 \u002B 10 
res0: Int = 15 

遺憾的是,似乎沒有被周圍一個很好的方式,如果你不想禁用Unicode轉義完全(-Xno-uescape)。一個在這個問題建議的解決方法是分離反斜槓字符:

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

感謝您的'-Xno-uescape'提示。即使在評論中也會導致編譯失敗。 – akauppi

+0

你也可以用Unicode編碼反斜槓和'u':'「」「\ u005c \ u0075」「」'正確給出'\ u'。 – ComFreek

相關問題