Объект scala.Predef
объект Predef
Объект Predef предоставляет определения, доступные во всех модулях компиляции Scala без явного указания.
Типы, Часто Используемые
Predef предоставляет псевдонимы типов для типов, которые часто используются, такие как неизменяемые типы коллекций scala.collection.immutable.Map и scala.collection.immutable.Set.
Вывод В Консоль
Для базового вывода в консоль, Predef предоставляет удобные методы print и println, которые являются псевдонимами методов в объекте scala.Console.
Утверждения
Набор assert функций предоставляется для использования в качестве способа документирования и динамической проверки инвариантов в коде. Вызовы assert могут быть исключены на этапе компиляции путём предоставления командной строки опции -Xdisable-assertions, которая поднимает -Xelide-below выше elidable.ASSERTION, до scalac команды.
Также предоставляются варианты assert для использования с инструментами статического анализа: assume, require и ensuring. require и ensuring предназначены для использования в качестве средства спецификации стиля «контракт проектирования» предварительных и последующих условий функций с намерением, что эти спецификации могут быть использованы инструментом статического анализа. Например,
def addNaturals(nats: List[Int]): Int = {
require(nats forall (_ >= 0), "List contains negative numbers")
nats.foldLeft(0)(_ + _)
} ensuring(_ >= 0)
Объявление addNaturals указывает, что список целых чисел должен содержать только натуральные числа (т.е. неотрицательные), и что возвращаемый результат также будет натуральным. require отличается от assert тем, что если условие не выполняется, то виноват вызывающий функцию, а не логическая ошибка, допущенная внутри addNaturals. ensuring является формой assert , которая объявляет гарантию, предоставляемую функцией по отношению к её возвращаемому значению.
Неявные Преобразования
Здесь также определено множество часто применяемых неявных преобразований, а также в родительском типе scala.LowPriorityImplicits. Неявные преобразования обеспечиваются для «расширения» числовых значений, например, преобразования значения Short в Long, как требуется, и для добавления дополнительных функций высшего порядка к массивам значений. Более подробное описание приведено в документации по scala.Array.
| Надтипы | |
|---|---|
| Тип «Я» |
Утилитарные Методы
Исходный код
??? может использоваться для обозначения методов, которые ещё не реализованы.
| Исключения |
|
|---|
Исходный код
Получить представление типа класса в момент выполнения. classOf[T] эквивалентно литералу класса T.class в Java.
| Возвращаемое значение | Представление класса Class типа |
|---|---|
| Пример |
val listClass = classOf[List[_]] // listClass is java.lang.Class[List[_]] = class scala.collection.immutable.List val mapIntString = classOf[Map[Int,String]] // mapIntString is java.lang.Class[Map[Int,String]] = interface scala.collection.immutable.Map |
Исходный код@inline
def identity[A](x: A): A
Метод, возвращающий входное значение.
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращаемое значение | значение |
Исходный код@inline
def implicitly[T](implicit e: T): T
Вызов неявного значения типа T. Обычно аргумент не передается явно.
| Параметры типа |
|
|---|---|
| Возвращаемое значение | неявное значение типа |
Исходный код@inline
def locally[T](@deprecatedName("x") x: T): T
Используется для обозначения блоков кода как выражений вместо того, чтобы рассматривать их как часть анонимных классов и т.п. Это просто другое имя для identity.
| Пример |
Разделение блоков кода от val x = new AnyRef
{
val y = ...
println(y)
}
// the { ... } block is seen as the body of an anonymous class
val x = new AnyRef
{
val y = ...
println(y)
}
// an empty line is a brittle "fix"
val x = new AnyRef
locally {
val y = ...
println(y)
}
// locally guards the block and helps communicate intent
|
|---|
Исходный код@inline
Получить единственное значение типа с уникальным обитателем.
| Пример |
object Foo val foo = valueOf[Foo.type] // foo is Foo.type = Foo val bar = valueOf[23] // bar is 23.type = 23 |
|---|
Утверждения
Эти методы поддерживают проверку программ и корректность во время выполнения.
Исходный код@elidable(ASSERTION)
Проверяет выражение, выбрасывая AssertionError если ложно. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.
| Параметры значения |
|
|---|---|
| См. также |
Исходный код@elidable(ASSERTION) @inline
Проверяет выражение, выбрасывая AssertionError если ложно. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.
| Параметры значения |
|
|---|---|
| См. также |
Исходный код@elidable(ASSERTION)
Проверяет выражение, выбрасывая AssertionError если ложно. Этот метод отличается от assert только выраженным намерением: assert содержит предикат, который нужно доказать, а assume содержит аксиому для статического проверяющего. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.
| Параметры значения |
|
|---|---|
| См. также |
Исходный код@elidable(ASSERTION) @inline
Проверяет выражение, выбрасывая AssertionError если ложно. Этот метод отличается от assert только выраженным намерением: assert содержит предикат, который нужно доказать, а assume содержит аксиому для статического проверяющего. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.
| Параметры значения |
|
|---|---|
| См. также |
Исходный код
Проверяет выражение, выбрасывая IllegalArgumentException если оно ложно. Этот метод похож на assert, но возлагает ответственность за нарушение условия на вызывающую сторону метода.
| Параметры значения |
|
|---|
Источник@inline
Проверяет выражение, выбрасывая IllegalArgumentException если оно ложно. Этот метод похож на assert, но возлагает ответственность за нарушение условия на вызывающую сторону метода.
| Параметры значения |
|
|---|
Вывод в консоль
Эти методы обеспечивают вывод через консоль.
Источник
Выводит объект в out с использованием его метода toString.
| Параметры значения |
|
|---|
Источник
Выводит свои аргументы в виде форматированной строки в стандартный вывод, основываясь на шаблоне строки (подобно printf в C).
Интерпретация форматирующих шаблонов описана в java.util.Formatter.
Рассмотрите использование интерполятора f для повышения типабезопасности и стилистической удобочитаемости.
| Параметры значения |
|
|---|---|
| Исключения |
|
| См. также |
Источник
Выводит символ новой строки в стандартный вывод.
Источник
Выводит объект в стандартный вывод, после чего символ новой строки.
| Параметры значения |
|
|---|
Псевдонимы
Эти псевдонимы вводят выбранные неизменяемые типы в область видимости без каких-либо импортов.
Источник
val ->: Tuple2.type
Позволяет деструктурировать кортежи с тем же синтаксисом, что и при их создании.
| Пример |
val tup = "foobar" -> 3
val c = tup match {
case str -> i => str.charAt(i)
}
|
|---|
Источник
Источник
type Function[-A, +B] = A => B
Источник
Источник
Источник
Источник
Источник
Тип String в Scala имеет все методы базового java.lang.String, являясь всего лишь его псевдонимом.
Кроме того, расширяющие методы из scala.collection.StringOps добавляются неявно через преобразование augmentString.
Преобразования строк
Преобразования из String в StringOps или WrappedString.
Источник@inline
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Неявные классы
Эти неявные классы добавляют полезные расширяющие методы к каждому типу.
Источник
final implicit class ArrowAssoc[A](self: A) extends AnyVal
Источник
final implicit def ArrowAssoc[A](self: A): ArrowAssoc[A]
Источник
Источник
Источник
final implicit class StringFormat[A](self: A) extends AnyVal
Источник
final implicit def StringFormat[A](self: A): StringFormat[A]
Источник@deprecated("Неявная инъекция оператора + устарела. Преобразуйте в String для вызова +", "2.13.0") @deprecated("Неявная инъекция оператора + устарела. Преобразуйте в String для вызова +", "2.13.0")
final implicit class any2stringadd[A](self: A) extends AnyVal
Вводит оператор конкатенации строк + в любые классы.
| Устарело |
|---|
Источник
final implicit def any2stringadd[A](self: A): any2stringadd[A]
Вводит оператор конкатенации строк + в любые классы.
Обёртки CharSequence
Обёртки, которые реализуют CharSequence и были неявными классами.
Источник
Источник
Источник
Источник
Преобразование Java в Scala
Неявное преобразование из примитивных обёрток Java в эквиваленты Scala.
Источник
Источник
Источник
Источник
Источник
Источник
Источник
Источник
Scala в Java
Неявное преобразование из Scala AnyVals в эквиваленты примитивных обёрток Java.
Источник
Источник
Источник
Источник
Источник
Источник
Источник
Источник
Массивы в ArraySeq
Преобразования из массивов в ArraySeq.
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Источник
| Унаследовано от | LowPriorityImplicits |
|---|
Типы
Источник@implicitNotFound(msg = "No Manifest available for ${T}.")
Источник
type OptManifest[T] = OptManifest[T]
Конкретные методы
Источник
Источник
Источник
transparent inline def summon[T](using inline x: T): x.type
Вызов заданного значения типа T. Обычно аргумент не передаётся явно.
| Параметры типа |
|
|---|---|
| Возвращает | заданное значение с типом: указанный параметр типа |
Конкретные поля
Источник
Источник
val NoManifest: NoManifest.type
Расширения
extension [T](x: T | Null)
Источник
inline def nn: x.type & T
Удаляет возможность передачи значения null для значения. Обратите внимание, что .nn выполняет проверенное приведение типов, поэтому при вызове на null значении будет выброшено NullPointerException.
| Пример |
val s1: String | Null = "hello" val s2: String = s1.nn val s3: String | Null = null val s4: String = s3.nn // throw NullPointerException |
|---|
Явные значения
Источник
implicit def $conforms[A]: A => A
Для всех A доступно неявное значение типа A => A, поскольку его всегда можно реализовать с помощью функции тождества. Это также означает, что неявное значение типа A => B всегда доступно, когда A <: B, потому что (A => A) <: (A => B).
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник@inline
Источник
implicit def tuple2ToZippedOps[T1, T2](x: (T1, T2)): Ops[T1, T2]
Источник
implicit def tuple3ToZippedOps[T1, T2, T3](x: (T1, T2, T3)): Ops[T1, T2, T3]
Источник@inline
Унаследованные неявные значения
Источник@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Источник@inline
Мы предпочитаем упакованные типы java.lang.* этим обёрткам в любых потенциальных конфликтах. Конфликты существуют, потому что обёрткам нужно реализовывать ScalaNumber, чтобы иметь симметричный метод equals, но это подразумевает реализацию java.lang.Number также.
Примечание: эти значения встроены, потому что они являются классами значений, но вызов xxxWrapper не удаляется, даже если он ничего не делает. Даже при инлайнинге каждый узел вызова выполняет бездействующую загрузку MODULE$ Predef, потому что, возможно, загрузка Predef имеет побочные эффекты!
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
Исходный код@inline
| Унаследовано от | LowPriorityImplicits |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/Predef$.html