Spec-Zone.ru › Scala 3.2

Object Predef.Predef

Исходный код

object 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

Исходный код
def identity[A](x: A): A

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

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

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

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

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

Возвращает

значение x.

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

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

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

тип значения, которое нужно вызвать

Возвращает

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

Исходный код
def locally[T](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

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

Утверждения

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

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

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

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

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

См. также

elidable

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

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

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

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

message

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

См. также

elidable

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

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

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

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

См. также

elidable

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

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

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

Источник
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]

Источник
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[Char]) extends CharSequence

Источник
def SeqCharSequence(sequenceOfChars: IndexedSeq[Char]): SeqCharSequence

Java в Scala

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

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

Source
implicit def Byte2byte(x: Byte): Байт

Source
implicit def Character2char(x: Character): Символ

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

Source
implicit def Float2float(x: Float): С плавающей точкой

Source
implicit def Integer2int(x: Integer): Целое число

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

Source
implicit def Short2short(x: Short): Короткий

Scala to Java

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

Source
implicit def boolean2Boolean(x: Булево): Boolean

Source
implicit def byte2Byte(x: Байт): Byte

Source
implicit def char2Character(x: Символ): Character

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

Source
implicit def float2Float(x: С плавающей точкой): Float

Source
implicit def int2Integer(x: Целое число): Integer

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

Source
implicit def short2Short(x: Короткий): Short

Массивы в ArraySeq

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

Source
implicit def genericWrapArray[T](xs: Массив[T]): ArraySeq[T]

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapBooleanArray(xs: Массив[Булево]): ofBoolean

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapByteArray(xs: Массив[Байт]): ofByte

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapCharArray(xs: Массив[Символ]): ofChar

Inherited from LowPriorityImplicits (hidden)

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

Inherited from LowPriorityImplicits (hidden)

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

Inherited from LowPriorityImplicits (hidden)

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

Inherited from LowPriorityImplicits (hidden)

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

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapRefArray[T <: AnyRef](xs: Массив[T]): ofRef[T]

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapShortArray(xs: Массив[Короткий]): ofShort

Inherited from LowPriorityImplicits (hidden)

Source
implicit def wrapUnitArray(xs: Массив[Единица]): ofUnit

Inherited from LowPriorityImplicits (hidden)

Типы

Source
type Manifest[T] = Manifest[T]

Source
type OptManifest[T] = OptManifest[T]

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

Source
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): T

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

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

тип значения, которое требуется получить

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

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

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

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

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

Расширения

extension (x: AnyRef | Null)

Источник
inline def eq(inline y: AnyRef | Null): Boolean

Разрешает проверку выражения типа T|Null, где T является подтипом AnyRef, на null с использованием eq вместо только ==. Это необходимо, так как Null больше не имеет методов eq или ne, только == и !=, унаследованных от Any.

Источник
inline def ne(inline y: AnyRef | Null): Boolean

Разрешает проверку выражения типа T|Null, где T является подтипом AnyRef, на null с использованием ne вместо только !=. Это необходимо, так как Null больше не имеет методов eq или ne, только == и !=, унаследованных от Any.

extension [T](x: T | Null)

Источник
inline def nn: T | Null & 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).

Источник
implicit def booleanArrayOps(xs: Array[Boolean]): ArrayOps[Boolean]

Источник
implicit def byteArrayOps(xs: Array[Byte]): ArrayOps[Byte]

Источник
implicit def charArrayOps(xs: Array[Char]): ArrayOps[Char]

Источник
implicit def doubleArrayOps(xs: Array[Double]): ArrayOps[Double]

Источник
implicit def floatArrayOps(xs: Array[Float]): ArrayOps[Float]

Источник
implicit def genericArrayOps[T](xs: Array[T]): ArrayOps[T]

Источник
implicit def intArrayOps(xs: Array[Int]): ArrayOps[Int]

Источник
implicit def longArrayOps(xs: Array[Long]): ArrayOps[Long]

Источник
implicit def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps[T]

Источник
implicit def shortArrayOps(xs: Array[Short]): ArrayOps[Short]

Источник
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]

Источник
implicit def unitArrayOps(xs: Array[Unit]): ArrayOps[Unit]

Унаследованные неявные преобразования

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

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def byteWrapper(x: Byte): RichByte

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

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

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def charWrapper(c: Char): RichChar

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def doubleWrapper(x: Double): RichDouble

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def floatWrapper(x: Float): RichFloat

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def intWrapper(x: Int): RichInt

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def longWrapper(x: Long): RichLong

Унаследовано от LowPriorityImplicits (скрыто)

Источник
implicit def shortWrapper(x: Short): RichShort

Унаследовано от LowPriorityImplicits (скрыто)

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

Spec-Zone.ru

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