Как произвести “” “в” здесь документы" scala?

В scala, "здесь документы", начинаются и заканчиваются в 3 "

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

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

7
задан retronym 26 July 2010 в 19:49
поделиться

4 ответа

Поскольку экранирование юникода через \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, похоже, предназначен только для внутреннего использования.

Тем не менее, возможно, есть какой-то более простой и понятный способ сделать это.

9
ответ дан 6 December 2019 в 10:47
поделиться

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

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

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

5
ответ дан 6 December 2019 в 10:47
поделиться

вы не можете

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

2
ответ дан 6 December 2019 в 10:47
поделиться

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

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

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


scala> val s = "Hi, \"\"\"everyone"
s: java.lang.String = Hi, """everyone
2
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: