Spec-Zone.ru › Scala 3.1

Класс scala.StringContext

Объект-компаньон • Исходный код

case class StringContext(parts: String*)

Этот класс предоставляет базовый механизм для интерполяции строк. Интерполяция строк позволяет пользователям встраивать ссылки на переменные непосредственно в *обрабатываемые* строковые литералы. Вот пример:

val name = "James"
println(s"Hello, $name")  // Hello, James

Любой обработанный строковый литерал переписывается как создание экземпляра и вызов метода этого класса. Например:

s"Hello, $name"

переписывается как:

StringContext("Hello, ", "").s(name)

По умолчанию этот класс предоставляет методы raw, s и f в качестве доступных интерполяторов.

Чтобы предоставить собственный интерполятор строк, создайте неявный класс, который добавляет метод к StringContext. Вот пример:

implicit class JsonHelper(private val sc: StringContext) extends AnyVal {
  def json(args: Any*): JSONObject = ...
}
val x: JSONObject = json"{ a: $a }"

Здесь класс-расширение JsonHelper неявно добавляет метод json к StringContext, который можно использовать для json строковых литералов.

Параметры значения
parts

Части, составляющие интерполированную строку, без выражений, которые вставляются интерполяцией.

Надтипы
интерфейс Serializable
интерфейс Product
интерфейс Equals
класс Object
интерфейс Matchable
класс Any

Классы

Исходный код
объект s

Конкретные методы

Исходный код
erased def f[A = Any](args: A*): String

Форматированный интерполятор строк.

Вставляет аргументы между соответствующими частями контекста строки. Также обрабатывает стандартные escape-последовательности, как определено в спецификации Scala. Наконец, если выражение интерполяции следует за строкой parts, которая начинается с спецификатора форматирования, выражение форматируется в соответствии с этим спецификатором. Обрабатываются все спецификаторы, разрешенные в строках форматирования Java, и аналогично тому, как они обрабатываются в Java.

Например:

val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall")  // James is 1.90 meters tall
Параметры значения
`args`

Аргументы, которые будут вставлены в результирующую строку.

Исключения
IllegalArgumentException

если количество parts в окружающем StringContext не превышает количество аргументов arg ровно на 1.

StringContext.InvalidEscapeException

если строка parts содержит обратную косую черту (\) символ, который не начинает допустимую escape-последовательность. Примечание: метод f работает, собирая строку форматирования из всех строк parts и используя java.lang.String.format для форматирования всех аргументов с этой строкой форматирования. Строка форматирования получается путем конкатенации всех строк parts и выполнения двух преобразований:

  1. Пусть _позиция форматирования_ — это начало любой строки parts , кроме первой. Если позиция форматирования не ссылается на символ % (который предполагается началом спецификатора форматирования), то вставляется спецификатор форматирования строк %s. 2. Любые символы % , не находящиеся в позициях форматирования, должны начинаться с одного из преобразований %% (буквальный процент) или %n (платформозависимый разделитель строк).

Исходный код
erased def raw(args: Any*): String

Интерполятор строк raw.

Вставляет аргументы между соответствующими частями контекста строки. В отличие от простого интерполятора строк s, этот не обрабатывает стандартные escape-последовательности, как определено в спецификации Scala.

Например, обработанная строка raw raw"a\nb" равна строке scala "a\\nb".

Примечание: Даже при использовании интерполятора raw Scala обработает escape-последовательности Unicode. Обработка Unicode в интерполяторе raw устарела начиная со scala 2.13.2 и будет удалена в будущем. Например:

scala> raw"\u005cu0023"
res0: String = #
Параметры значения
`args`

Аргументы, которые будут вставлены в результирующую строку.

Исключения
IllegalArgumentException

если количество parts в окружающем StringContext не превышает количество аргументов arg ровно на 1.

Примечание

Компилятор Scala может заменить вызов этого метода эквивалентным, но более эффективным использованием StringBuilder.

Исходный код
erased def s(args: Any*): String

Простой интерполятор строк.

Вставляет аргументы между соответствующими частями контекста строки. Также обрабатывает стандартные escape-последовательности, как определено в спецификации Scala. Вот пример использования:

val name = "James"
println(s"Hello, $name")  // Hello, James

В этом примере выражение $name заменяется toString переменной name. Интерполятор s может принимать toString любого произвольного выражения в ${} блоке, например:

println(s"1 + 1 = ${1 + 1}")

будет выводить строку 1 + 1 = 2.

Параметры значения
`args`

Аргументы, которые будут вставлены в результирующую строку.

Исключения
IllegalArgumentException

если количество parts в окружающем StringContext не превышает количество аргументов arg ровно на 1.

StringContext.InvalidEscapeException

если строка parts содержит обратную косую черту (\) символ, который не начинает допустимую escape-последовательность.

Примечание

Компилятор Scala может заменить вызов этого метода эквивалентным, но более эффективным использованием StringBuilder.

Наследованные методы

Исходный код
def productElementNames: Iterator[String]

Итератор по именам всех элементов этого произведения.

Наследуется от Product

Исходный код
def productIterator: Iterator[Any]

Итератор по всем элементам этого произведения.

Возвращает

в реализации по умолчанию, Iterator[Any]

Наследуется от Product

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/StringContext.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API