Как вывести """в" здесь документы "Scala?

В Scala "здесь документы" это начало и конец в 3 "

val str = """Hi,everyone"""

Но что, если строка содержит """? Как вывести Hi,"""everyone?

4 ответа

Решение

Так как Unicode, выходящий через \u0022 в многострочных строковых литералах вам не помогут, потому что они будут оцениваться как одни и те же три кавычки, ваш единственный шанс - объединить так:

"""Hi, """+"""""""""+"""everyone"""

Хорошо то, что компилятор scala достаточно умен, чтобы это исправить, и поэтому он сделает из него одну единственную строку при компиляции.

По крайней мере вот что scala -print говорит.

object o {
  val s = """Hi, """+"""""""""+"""everyone"""
  val t = "Hi, \"\"\"everyone"
}

и используя scala -print

Main$$anon$1$o.this.s = "Hi, """everyone";
Main$$anon$1$o.this.t = "Hi, """everyone";

Обратите внимание, что вы не можете ввести его таким образом. Формат, который scala -print Выводы, похоже, предназначены только для внутреннего использования.

Тем не менее, может быть более простой, более простой способ сделать это.

Это полный взлом, который я разместил на похожем вопросе, но он работает и здесь: используйте XML-структуры Scala в качестве промежуточного формата.

val str = <a>Hi,"""everyone</a> text

Это даст вам строку с тремя двойными кавычками.

Вы не можете использовать тройные кавычки, насколько я знаю. В спецификации, раздел 1.3.5, говорится:

Многострочный строковый литерал - это последовательность символов, заключенная в тройные кавычки """ ... """. Последовательность символов произвольна, за исключением того, что она может содержать три или более символов полезных кавычек только в самом конце. Символы не обязательно должны быть напечатаны; переводы строки и другие управляющие символы также разрешены. Экранирование Unicode работает как и везде, но ни одна из escape-последовательностей в (§1.3.6) не интерпретируется.

Поэтому, если вы хотите вывести три кавычки в строке, вы все равно можете использовать строку в одинарных кавычках с экранированием:


scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone

Ты не можешь

scred heredocs являются необработанными строками и не используют escape-коды, если вам нужны тройные кавычки в строке, используйте конкатенацию строк и добавьте их

Другие вопросы по тегам