2014-06-05 15 views
5

Bir Scala Dizgesinde, bu gerçek sözdizimini içermesi gerekir: \usepackage{x}. Böylece,Unicode çıkışında Scala raw dizeleri hatası

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

Tek çift tırnaklı dizeleri de başarısız kanıtlamak için

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

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

girişimleri şimdiye kadar içerdiğini olurdu istenen.

http://docs.scala-lang.org/overviews/core/string-interpolation.html ardından, bir çalışma örneği unicode durumlarını kapsamaz

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

içerir.

+0

Eğer bir cevabınız varsa, orijinal sorunuzu düzenlemeyin, yanıt yazmayın ve kabul etmeyin. –

cevap

10

Sorunla karşılaştığınız göründüğünde SI-4706: Unicode literal syntax thwarts common use cases for triple-quotes.

Scala'da, unicode çıkış dizileri yalnızca karakter veya dize değişmezleri içinde işlenmez. Aşağıdaki kod çalışacağına dair açık olmayabilir:

scala> 5 \u002B 10 
res0: Int = 15 

Maalesef tamamen size Unicode devre dışı bırakmak istemiyorsanız bu çevrede iyi bir yolu olmalı (-Xno-uescape) orada kaçar gibi görünmüyor. Bu sorunda önerilen geçici çözümlerden biri, ters eğik çizgi karakterini ayırmaktır:

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

'-Xno-uescape' ipucu için teşekkürler. Yorumlarda bile derlemelerin başarısız olmasına neden olur. – akauppi

+0

Ayrıca Unicode kodlamayı hem ters eğik çizgi hem de 'u': '" "" \ u005c \ u0075 "" "doğru bir şekilde" \ u "verir. – ComFreek