Ошибка исходных строк Scala при экранировании Юникода
В Scala String необходимо включить этот буквальный дословно: \usepackage{x}
, Таким образом, желательным было бы то, что для
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.
1 ответ
Похоже, вы столкнулись с проблемой SI-4706: буквальный синтаксис Unicode препятствует распространенным случаям использования тройных кавычек.
В Scala escape-последовательности Юникода обрабатываются не только внутри символьных или строковых литералов. Может быть не очевидно, что следующий код будет работать:
scala> 5 \u002B 10
res0: Int = 15
К сожалению, кажется, что нет хорошего способа обойти это, если вы не хотите полностью отключать экранирование Юникода (-Xno-uescape
). Одним из предложенных в этой проблеме обходных путей является разделение символа обратной косой черты:
scala> """\""" + """usepackage{X}"""
res1: String = \usepackage{X}