Spec-Zone.ru › Scala 3.2

Класс StringContext.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

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

Супертипы
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any

Классы

Исходный код
object 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

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

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

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

Примечание: Даже при использовании интерполятора raw Scala будет обрабатывать Unicode-escape-последовательности. Обработка 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.2.0/scala/StringContext.html

Spec-Zone.ru

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