Spec-Zone.ru › Scala 3.1

Объект 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.

Надтипы
класс Object
тракт Matchable
класс Any
Тип «Я»
Predef.type

Утилитарные Методы

Исходный код
def ???: Nothing

??? может использоваться для обозначения методов, которые ещё не реализованы.

Исключения
NotImplementedError

при вызове ???.

Исходный код
def classOf[T]: Class[T]

Получить представление типа класса в момент выполнения. classOf[T] эквивалентно литералу класса T.class в Java.

Возвращаемое значение

Представление класса Class типа T в момент выполнения.

Пример
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

Метод, возвращающий входное значение.

Параметры типа
A

тип входного значения x.

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

значение типа A для возврата.

Возвращаемое значение

значение x.

Исходный код@inline
def implicitly[T](implicit e: T): T

Вызов неявного значения типа T. Обычно аргумент не передается явно.

Параметры типа
T

тип значения для вызова

Возвращаемое значение

неявное значение типа T

Исходный код@inline
def locally[T](@deprecatedName("x") x: T): T

Используется для обозначения блоков кода как выражений вместо того, чтобы рассматривать их как часть анонимных классов и т.п. Это просто другое имя для identity.

Пример

Разделение блоков кода от new:

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
def valueOf[T](implicit vt: ValueOf[T]): T

Получить единственное значение типа с уникальным обитателем.

Пример
object Foo
val foo = valueOf[Foo.type]
// foo is Foo.type = Foo
val bar = valueOf[23]
// bar is 23.type = 23

Утверждения

Эти методы поддерживают проверку программ и корректность во время выполнения.

Исходный код@elidable(ASSERTION)
def assert(assertion: Boolean): Unit

Проверяет выражение, выбрасывая AssertionError если ложно. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.

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

выражение для проверки

См. также

elidable

Исходный код@elidable(ASSERTION) @inline
final def assert(assertion: Boolean, message: => Any): Unit

Проверяет выражение, выбрасывая AssertionError если ложно. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.

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

выражение для проверки

message

строка для включения в сообщение об ошибке

См. также

elidable

Исходный код@elidable(ASSERTION)
def assume(assumption: Boolean): Unit

Проверяет выражение, выбрасывая AssertionError если ложно. Этот метод отличается от assert только выраженным намерением: assert содержит предикат, который нужно доказать, а assume содержит аксиому для статического проверяющего. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.

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

выражение для проверки

См. также

elidable

Исходный код@elidable(ASSERTION) @inline
final def assume(assumption: Boolean, message: => Any): Unit

Проверяет выражение, выбрасывая AssertionError если ложно. Этот метод отличается от assert только выраженным намерением: assert содержит предикат, который нужно доказать, а assume содержит аксиому для статического проверяющего. Вызовы этого метода не будут генерироваться, если -Xelide-below больше, чем ASSERTION.

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

выражение для проверки

message

строка для включения в сообщение об ошибке

См. также

elidable

Исходный код
def require(requirement: Boolean): Unit

Проверяет выражение, выбрасывая IllegalArgumentException если оно ложно. Этот метод похож на assert, но возлагает ответственность за нарушение условия на вызывающую сторону метода.

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

выражение для проверки

Источник@inline
final def require(requirement: Boolean, message: => Any): Unit

Проверяет выражение, выбрасывая IllegalArgumentException если оно ложно. Этот метод похож на assert, но возлагает ответственность за нарушение условия на вызывающую сторону метода.

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

строка для включения в сообщение об ошибке

requirement

выражение для проверки

Вывод в консоль

Эти методы обеспечивают вывод через консоль.

Источник
def print(x: Any): Unit

Выводит объект в out с использованием его метода toString.

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

объект для вывода; может быть null.

Источник
def printf(text: String, xs: Any*): Unit

Выводит свои аргументы в виде форматированной строки в стандартный вывод, основываясь на шаблоне строки (подобно printf в C).

Интерпретация форматирующих шаблонов описана в java.util.Formatter.

Рассмотрите использование интерполятора f для повышения типабезопасности и стилистической удобочитаемости.

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

шаблон форматирования аргументов.

xs

аргументы, используемые для создания шаблона.

Исключения
java.lang.IllegalArgumentException

если возникла проблема с форматирующей строкой или аргументами

См. также

StringContext.f

Источник
def println(): Unit

Выводит символ новой строки в стандартный вывод.

Источник
def println(x: Any): Unit

Выводит объект в стандартный вывод, после чего символ новой строки.

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

объект для вывода.

Псевдонимы

Эти псевдонимы вводят выбранные неизменяемые типы в область видимости без каких-либо импортов.

Источник
val ->: Tuple2.type

Позволяет деструктурировать кортежи с тем же синтаксисом, что и при их создании.

Пример
val tup = "foobar" -> 3
val c = tup match {
 case str -> i => str.charAt(i)
}

Источник
type Class[T] = Class[T]

Источник
type Function[-A, +B] = A => B

Источник
type Map[K, +V] = Map[K, V]

Источник
val Map: Map.type

Источник
type Set[A] = Set[A]

Источник
val Set: Set.type

Источник
type String = String

Тип String в Scala имеет все методы базового java.lang.String, являясь всего лишь его псевдонимом.

Кроме того, расширяющие методы из scala.collection.StringOps добавляются неявно через преобразование augmentString.

Преобразования строк

Преобразования из String в StringOps или WrappedString.

Источник@inline
implicit def augmentString(x: String): StringOps

Источник
implicit def wrapString(s: String): WrappedString

Унаследовано от LowPriorityImplicits

Неявные классы

Эти неявные классы добавляют полезные расширяющие методы к каждому типу.

Источник
final implicit class ArrowAssoc[A](self: A) extends AnyVal

Источник
final implicit def ArrowAssoc[A](self: A): ArrowAssoc[A]

Источник
final implicit class Ensuring[A](self: A) extends AnyVal

Источник
final implicit def Ensuring[A](self: A): Ensuring[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 и были неявными классами.

Источник
final class ArrayCharSequence(arrayOfChars: Array[Char]) extends CharSequence

Источник
def ArrayCharSequence(arrayOfChars: Array[Char]): ArrayCharSequence

Источник
final class SeqCharSequence(sequenceOfChars: IndexedSeq[Символ]) extends CharSequence

Источник
def SeqCharSequence(sequenceOfChars: IndexedSeq[Символ]): SeqCharSequence

Преобразование Java в Scala

Неявное преобразование из примитивных обёрток Java в эквиваленты Scala.

Источник
implicit def Boolean2boolean(x: Boolean): Boolean

Источник
implicit def Byte2byte(x: Byte): Байт

Источник
implicit def Character2char(x: Character): Символ

Источник
implicit def Double2double(x: Double): Двойная точность

Источник
implicit def Float2float(x: Float): С плавающей запятой

Источник
implicit def Integer2int(x: Integer): Целое

Источник
implicit def Long2long(x: Long): Длинное целое

Источник
implicit def Short2short(x: Short): Короткое целое

Scala в Java

Неявное преобразование из Scala AnyVals в эквиваленты примитивных обёрток Java.

Источник
implicit def boolean2Boolean(x: Boolean): Boolean

Источник
implicit def byte2Byte(x: Байт): Byte

Источник
implicit def char2Character(x: Символ): Character

Источник
implicit def double2Double(x: Двойная точность): Double

Источник
implicit def float2Float(x: С плавающей запятой): Float

Источник
implicit def int2Integer(x: Целое): Integer

Источник
implicit def long2Long(x: Длинное целое): Long

Источник
implicit def short2Short(x: Короткое целое): Short

Массивы в ArraySeq

Преобразования из массивов в ArraySeq.

Источник
implicit def genericWrapArray[T](xs: Массив[T]): ArraySeq[T]

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapBooleanArray(xs: Массив[Boolean]): ofBoolean

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapByteArray(xs: Массив[Байт]): ofByte

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapCharArray(xs: Массив[Символ]): ofChar

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapDoubleArray(xs: Массив[Двойная точность]): ofDouble

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapFloatArray(xs: Массив[С плавающей запятой]): ofFloat

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapIntArray(xs: Массив[Целое]): ofInt

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapLongArray(xs: Массив[Длинное целое]): ofLong

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapRefArray[T <: AnyRef](xs: Массив[T]): ofRef[T]

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapShortArray(xs: Массив[Короткое целое]): ofShort

Унаследовано от LowPriorityImplicits

Источник
implicit def wrapUnitArray(xs: Массив[Единица]): ofUnit

Унаследовано от LowPriorityImplicits

Типы

Источник@implicitNotFound(msg = "No Manifest available for ${T}.")
type Manifest[T] = Manifest[T]

Источник
type OptManifest[T] = OptManifest[T]

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

Источник
def manifest[T](implicit m: Manifest[T]): Manifest[T]

Источник
def optManifest[T](implicit m: OptManifest[T]): OptManifest[T]

Источник
transparent inline def summon[T](using inline x: T): x.type

Вызов заданного значения типа T. Обычно аргумент не передаётся явно.

Параметры типа
T

тип значения, которое необходимо вызвать

Возвращает

заданное значение с типом: указанный параметр типа

Конкретные поля

Источник
val Manifest: Manifest.type

Источник
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
implicit def booleanArrayOps(xs: Массив[Булево]): ArrayOps[Булево]

Источник@inline
implicit def byteArrayOps(xs: Массив[Байт]): ArrayOps[Байт]

Источник@inline
implicit def charArrayOps(xs: Массив[Символ]): ArrayOps[Символ]

Источник@inline
implicit def doubleArrayOps(xs: Массив[Двойное]): ArrayOps[Двойное]

Источник@inline
implicit def floatArrayOps(xs: Массив[Поплавок]): ArrayOps[Поплавок]

Источник@inline
implicit def genericArrayOps[T](xs: Массив[T]): ArrayOps[T]

Источник@inline
implicit def intArrayOps(xs: Массив[Целое]): ArrayOps[Целое]

Источник@inline
implicit def longArrayOps(xs: Массив[Длинное]): ArrayOps[Длинное]

Источник@inline
implicit def refArrayOps[T <: AnyRef](xs: Массив[T]): ArrayOps[T]

Источник@inline
implicit def shortArrayOps(xs: Массив[Короткий]): ArrayOps[Короткий]

Источник
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
implicit def unitArrayOps(xs: Массив[Единица]): ArrayOps[Единица]

Унаследованные неявные значения

Источник@inline
implicit def booleanWrapper(x: Булево): RichBoolean

Унаследовано от LowPriorityImplicits

Источник@inline
implicit def byteWrapper(x: Байт): RichByte

Мы предпочитаем упакованные типы java.lang.* этим обёрткам в любых потенциальных конфликтах. Конфликты существуют, потому что обёрткам нужно реализовывать ScalaNumber, чтобы иметь симметричный метод equals, но это подразумевает реализацию java.lang.Number также.

Примечание: эти значения встроены, потому что они являются классами значений, но вызов xxxWrapper не удаляется, даже если он ничего не делает. Даже при инлайнинге каждый узел вызова выполняет бездействующую загрузку MODULE$ Predef, потому что, возможно, загрузка Predef имеет побочные эффекты!

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное charWrapper(c: Символ): RichChar

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное doubleWrapper(x: Двойная точность): RichDouble

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное floatWrapper(x: Число с плавающей точкой): RichFloat

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное intWrapper(x: Целое число): RichInt

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное longWrapper(x: Длинное целое число): RichLong

Унаследовано от LowPriorityImplicits

Исходный код@inline
явное shortWrapper(x: Короткий): RichShort

Унаследовано от 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

Spec-Zone.ru

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