2014-06-05 2 views
5

스칼라 문자열에서이 리터럴 축 어를 포함해야합니다 (\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}""" 
      ^

단일 따옴표 문자열뿐만 아니라 실패 증명에 대한

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

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

시도가 지금까지 포함하는 것이 될 것이다 원했다.

http://docs.scala-lang.org/overviews/core/string-interpolation.html 이후, 작동 예에서는 유니 케이스 커버하지 않는

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

를 포함한다.

+0

답변이 있으면 원래 질문을 편집하고 대답을 게시하고 동의하십시오. –

답변

10

문제가 SI-4706: Unicode literal syntax thwarts common use cases for triple-quotes 인 것처럼 보입니다.

스칼라에서 유니 코드 이스케이프 시퀀스는 문자 또는 문자열 리터럴 내에서만 처리되지 않습니다. 다음과 같은 코드가 작동 것이라고 명확하지 않을 수 있습니다 :

scala> 5 \u002B 10 
res0: Int = 15 

불행하게도, 완전히 유니 코드를 해제하지 않으려면이 주위에 좋은 방법으로 (-Xno-uescape을)이 기약하지 않는 것 같습니다. 이 문제에서 제안 된 해결 방법 중 하나는 백 슬래시 문자 분리입니다.

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

'-Xno-uescape'팁 주셔서 감사합니다. 주석의 \ u조차도 컴파일이 실패하게됩니다. – akauppi

+0

또한 백 슬래시와 'u':' "" ""\ u005c \ u0075 "" "가 유니 코드로 인코딩되면 '\ u'가 올바르게 표시됩니다. – ComFreek