В scala, "здесь документы", начинаются и заканчиваются в 3 "
val str = """Hi,everyone"""
Но что, если строка содержит """
? Как произвести Hi,"""everyone
?
Поскольку экранирование юникода через \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
Это даст вам строку с тремя двойными кавычками.
вы не можете
scala heredocs являются необработанными строками и не используют никаких escape-кодов если вам нужны тройные кавычки в строке, используйте конкатенацию строк, добавьте их
Насколько я знаю, тройные кавычки использовать нельзя. В спецификации, раздел 1.3.5, гласит:
Многострочный строковый литерал - это последовательность символов, заключенная в тройные кавычки. "" "..." "". Последовательность символов произвольная, за исключением того, что может содержать три или более потребляющих кавычки только в самом конце. Персонажи должны не обязательно для печати; новые строки или другие управляющие символы также разрешены. Экраны Unicode работают, как и везде, но ни одна из escape-последовательностей в (§1.3.6) интерпретируется.
Итак, если вы хотите вывести три кавычки в строке, вы все равно можете использовать строку одинарной кавычки с экранированием:
scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone