Spec-Zone.ru › Scala 2.13 Library

Пакет scala

пакет scala

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

Источник
package.scala
Линейные супертипы
AnyRef, Any

Члены пакета

пакет annotation

пакет beans

пакет collection

пакет compat

пакет concurrent

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

Руководство

Более подробное руководство по Future и Promise, включая обсуждение и примеры, можно найти по адресу http://docs.scala-lang.org/overviews/core/futures.html.

Общие импорты

При работе с Future часто удобно импортировать весь пакет concurrent:

import scala.concurrent._

При использовании таких вещей, как Futures, часто требуется неявный ExecutionContext в области видимости. Общие рекомендации по этим неявным параметрам следующие.

Если рассматриваемый код представляет собой определение класса или метода, и нет доступного ExecutionContext , запросите его у вызывающего элемента, добавив список неявных параметров:

def myMethod(myParam: MyType)(implicit ec: ExecutionContext) = …
//Or
class MyClass(myParam: MyType)(implicit ec: ExecutionContext) { … }

Это позволяет вызывающему элементу метода или создателю экземпляра класса определить, какой ExecutionContext следует использовать.

Для типичного использования REPL и экспериментов часто желательно импортировать глобальный ExecutionContext.

import scala.concurrent.ExcutionContext.Implicits.global

Указание продолжительности

Операции часто требуют указания продолжительности. Доступен DSL для продолжительности, чтобы облегчить определение этих значений:

import scala.concurrent.duration._
val d: Duration = 10.seconds

Использование Future для неблокирующего вычисления

Базовое использование future легко с помощью фабричного метода в Future, который асинхронно выполняет предоставленную функцию, возвращая будущий результат этой функции без блокировки текущей нити. Для создания Future вам нужно предоставить ExecutionContext, либо неявно, либо явно:

import scala.concurrent._
import ExecutionContext.Implicits.global  // implicit execution context

val firstZebra: Future[Int] = Future {
  val source = scala.io.Source.fromFile("/etc/dictionaries-common/words")
  source.toSeq.indexOfSlice("zebra")
}

Избегайте блокировки

Хотя блокировка возможна для ожидания результатов (с обязательной длительностью таймаута):

import scala.concurrent.duration._
Await.result(firstZebra, 10.seconds)

и хотя это иногда необходимо, особенно для целей тестирования, блокировка в целом не рекомендуется при работе с Future и параллелизмом, чтобы избежать потенциальных тупиков и повысить производительность. Вместо этого используйте обратные вызовы или комбинаторы, чтобы оставаться в области Future:

val animalRange: Future[Int] = for {
  aardvark <- firstAardvark
  zebra <- firstZebra
} yield zebra - aardvark

animalRange.onSuccess {
  case x if x > 500000 => println("It's a long way from Aardvark to Zebra")
}

пакет io

пакет jdk

пакет math

Пакет object scala.math содержит методы для выполнения основных числовых операций, таких как элементарные экспоненциальные, логарифмические, корневые и тригонометрические функции.

Все методы передают в java.lang.Math, если не указано иное.

См. также

java.lang.Math

пакет ref

пакет reflect

пакет sys

Пакет object scala.sys содержит методы для чтения и изменения основных аспектов виртуальной машины, а также внешнего мира.

С

2.9

пакет util

Члены типов

тип ::[A] = scala.collection.immutable.::[A]

запечатанный абстрактный класс <:<[-From, +To] extends (From) => To с Serializable

Пример A <:< B свидетельствует о том, что A является подтипом B. Требование неявного аргумента типа A <:< B кодирует обобщённое ограничение A <: B.

Чтобы ограничить любой абстрактный тип T, который находится в области видимости в списке аргументов метода (не только собственные параметры типа метода), просто добавьте неявный аргумент типа T <:< U, где U является требуемым верхним ограничением; или для нижних ограничений используйте: L <:< T, где L является требуемым нижним ограничением.

В случае возникновения каких-либо неясностей относительно того, какой метод идёт в каком направлении, все методы "Co" (включая apply) идут слева направо в типе ("с" типом), а все методы "Contra" идут справа налево ("против" типа). Например, apply преобразует From в To, а substituteContra заменяет To в типе на From.

Частично подготовлено Джейсоном Заугом.

From

тип, который доказан как подтип To

To

тип, который доказан как супертип From

Аннотации
@implicitNotFound("Невозможно доказать, что ${From} <:< ${To}.")
Пример:

    scala.Option#flatten

    sealed trait Option[+A] {
      // def flatten[B, A <: Option[B]]: Option[B] = ...
      // won't work, since the A in flatten shadows the class-scoped A.
      def flatten[B](implicit ev: A <:< Option[B]): Option[B]
        = if(isEmpty) None else ev(get)
      // Because (A <:< Option[B]) <: (A => Option[B]), ev can be called to turn the
      // A from get into an Option[B], and because ev is implicit, that call can be
      // left out and inserted automatically.
    }
См. также

=:= для выражения ограничений равенства

запечатанный абстрактный класс =:=[From, To] extends <:<[From, To] с Serializable

Пример A =:= B свидетельствует о том, что типы A и B равны. Он также выступает как A <:< B, но не как B <:< A (непосредственно) из-за ограничений на наследование.

В случае возникновения каких-либо неясностей относительно того, какой метод идёт в каком направлении, все методы "Co" (включая apply) идут слева направо в типе ("с" типом), а все методы "Contra" идут справа налево ("против" типа). Например, apply преобразует From в To, а substituteContra заменяет To в типе на From.

From

тип, который доказан как равный To

To

тип, который доказан как равный From

Аннотации
@implicitNotFound("Невозможно доказать, что ${From} =:= ${To}.")
Пример:

    Вариант in-place для scala.collection.mutable.ArrayBuffer#transpose

    implicit class BufOps[A](private val buf: ArrayBuffer[A]) extends AnyVal {
      def inPlaceTranspose[E]()(implicit ev: A =:= ArrayBuffer[E]) = ???
      // Because ArrayBuffer is invariant, we can't make do with just a A <:< ArrayBuffer[E]
      // Getting buffers *out* from buf would work, but adding them back *in* wouldn't.
    }
См. также

<:< для выражения ограничений подтипов

тип AbstractMethodError = java.lang.AbstractMethodError

абстрактный класс Any

Класс Any является корнем иерархии классов Scala. Каждый класс в среде выполнения Scala наследует непосредственно или косвенно от этого класса.

Начиная с Scala 2.10, возможно прямое расширение Any с помощью универсальных трейтов. Универсальный трейт — это трейт, который расширяет Any, содержит только def и не производит инициализацию.

Основной случай использования универсальных трейтов — это разрешить базовое наследование методов для классов значений. Например,

trait Printable extends Any {
  def print(): Unit = println(this)
}
class Wrapper(val underlying: Int) extends AnyVal with Printable

val w = new Wrapper(3)
w.print()

См. Классы значений и универсальные трейты для получения дополнительной информации о взаимодействии универсальных трейтов и классов значений.

абстрактный класс AnyVal extends Any

AnyVal — это базовый класс всех типов значений, которые описывают значения, не реализованные как объекты в базовой системе хоста. Классы значений определены в спецификации языка Scala, раздел 12.2.

Стандартная реализация включает девять AnyVal подтипов:

scala.Double, scala.Float, scala.Long, scala.Int, scala.Char, scala.Short и scala.Byte — это числовые типы значений.

scala.Unit и scala.Boolean — это нечисловые типы значений.

Другие группы:

    Типы поддиапазона — это scala.Byte, scala.Short и scala.Char. Типы целых чисел включают типы поддиапазона, а также scala.Int и scala.Long. Типы с плавающей запятой — scala.Float и scala.Double.

До Scala 2.10, AnyVal был запечатанным траитом. Однако начиная с Scala 2.10, можно определить подкласс AnyVal, называемый пользовательским классом значений, который обрабатывается компилятором особым образом. Правильно определённые пользовательские классы значений обеспечивают возможность повышения производительности для пользовательских типов, избегая выделения памяти для объекта во время выполнения и заменяя вызовы виртуальных методов вызовами статических методов.

Пользовательские классы значений, которые избегают выделения памяти…

    должны иметь единственный val параметр, который является базовым представлением во время выполнения.могут определять def, но не val, var или вложенные traits, class или object.обычно наследуют только от траита AnyVal.не могут использоваться в тестах типов или сопоставления с образцом.не могут переопределять методы equals или hashCode.

Минимальный пример:

class Wrapper(val underlying: Int) extends AnyVal {
  def foo: Wrapper = new Wrapper(underlying * 19)
}

Важно отметить, что пользовательские классы значений ограничены, и в некоторых случаях всё ещё должны выделять память для экземпляра класса значений во время выполнения. Эти ограничения и обстоятельства подробно описаны в Value Classes and Universal Traits.

траит App extends DelayedInit

Траит App может быть использован для быстрого преобразования объектов в исполняемые программы. Вот пример:

object Main extends App {
  Console.println("Hello World: " + (args mkString ", "))
}

Явный метод main не требуется. Вместо этого весь тело класса становится «главным методом».

args возвращает текущие аргументы командной строки в виде массива.

Ограничения

Следует отметить, что этот траит реализован с использованием функциональности DelayedInit, что означает, что поля объекта не будут инициализированы до выполнения главного метода.

Будущие версии этого траита больше не будут наследовать от DelayedInit.

Since

2.1

final класс Array[T] extends java.io.Serializable with java.lang.Cloneable

Массивы — это изменяемые, индексированные коллекции значений. Array[T] — представление Scala для T[] Java.

val numbers = Array(1, 2, 3, 4)
val first = numbers(0) // read the first element
numbers(3) = 100 // replace the 4th array element with 100
val biggerNumbers = numbers.map(_ * 2) // multiply all numbers by two

Массивы используют два распространённых элемента синтаксического сахара Scala, показанные в строках 2 и 3 приведённого выше примера кода. Строка 2 преобразуется в вызов apply(Int), а строка 3 преобразуется в вызов update(Int, T).

В scala.Predef существуют два неявных преобразования, которые часто применяются к массивам: преобразование в scala.collection.ArrayOps (показано в строке 4 примера выше) и преобразование в scala.collection.mutable.ArraySeq (подтип scala.collection.Seq). Оба типа предоставляют многие стандартные операции, используемые в API коллекций Scala. Преобразование в ArrayOps временное, поскольку все операции, определённые на ArrayOps возвращают Array, в то время как преобразование в ArraySeq постоянное, поскольку все операции возвращают ArraySeq.

Преобразование в ArrayOps имеет приоритет над преобразованием в ArraySeq. Например, рассмотрите следующий код:

val arr = Array(1, 2, 3)
val arrReversed = arr.reverse
val seqReversed : collection.Seq[Int] = arr.reverse

Значение arrReversed будет типа Array[Int], с неявным преобразованием в ArrayOps для выполнения операции reverse. Значение seqReversed, с другой стороны, будет вычислено путём преобразования в ArraySeq сначала и вызова варианта reverse, который возвращает другой ArraySeq.

Since

1.0

См. также

Scala Language Specification, для получения подробной информации о преобразованиях, которые компилятор Scala выполняет для массивов (разделы 6.6 и 6.15 соответственно).

"Scala 2.8 Arrays" — документ Scala Improvement Document, описывающий массивы с версии Scala 2.8.

"The Scala 2.8 Collections' API" раздел о Array Мартина Одерски для получения дополнительной информации.

тип ArrayIndexOutOfBoundsException = java.lang.ArrayIndexOutOfBoundsException

тип BigDecimal = scala.math.BigDecimal

тип BigInt = scala.math.BigInt

абстрактный final класс Boolean extends AnyVal

Boolean (эквивалент примитивному типу boolean Java) — подтип scala.AnyVal. Экземпляры Boolean не представлены объектом в базовой системе выполнения.

Существует неявное преобразование из scala.Boolean => scala.runtime.RichBoolean, которое предоставляет полезные операции, отличные от примитивных.

абстрактный final класс Byte extends AnyVal

Byte, 8-битовое знаковое целое число (эквивалент примитивному типу byte Java) — подтип scala.AnyVal. Экземпляры Byte не представлены объектом в базовой системе выполнения.

Существует неявное преобразование из scala.Byte => scala.runtime.RichByte, которое предоставляет полезные операции, отличные от примитивных.

абстрактный final класс Char extends AnyVal

Char, a 16-bit unsigned integer (equivalent to Java's char primitive type) is a subtype of scala.AnyVal. Instances of Char are not represented by an object in the underlying runtime system.

There is an implicit conversion from scala.Char => scala.runtime.RichChar which provides useful non-primitive operations.

type ClassCastException = java.lang.ClassCastException

type Cloneable = java.lang.Cloneable

abstract final class Double extends AnyVal

Double, a 64-bit IEEE-754 floating point number (equivalent to Java's double primitive type) is a subtype of scala.AnyVal. Instances of Double are not represented by an object in the underlying runtime system.

There is an implicit conversion from scala.Double => scala.runtime.RichDouble which provides useful non-primitive operations.

final class DummyImplicit extends AnyRef

trait Dynamic extends Any

A marker trait that enables dynamic invocations. Instances x of this trait allow method invocations x.meth(args) for arbitrary method names meth and argument lists args as well as field accesses x.field for arbitrary field names field.

If a call is not natively supported by x (i.e. if type checking fails), it is rewritten according to the following rules:

foo.method("blah")      ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah")  ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2)    ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field           ~~> foo.selectDynamic("field")
foo.varia = 10      ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13    ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10)         ~~> foo.applyDynamic("arr")(10)

As of Scala 2.10, defining direct or indirect subclasses of this trait is only possible if the language feature dynamics is enabled.

type Either[+A, +B] = scala.util.Either[A, B]

abstract class Enumeration extends Serializable

Defines a finite set of values specific to the enumeration. Typically these values enumerate all possible forms something can take and provide a lightweight alternative to case classes.

Each call to a Value method adds a new unique value to the enumeration. To be accessible, these values are usually defined as val members of the enumeration.

All values in an enumeration share a common, unique type defined as the Value type member of the enumeration (Value selected on the stable identifier path of the enumeration instance).

Values SHOULD NOT be added to an enumeration after its construction; doing so makes the enumeration thread-unsafe. If values are added to an enumeration from multiple threads (in a non-synchronized fashion) after construction, the behavior of the enumeration is undefined.

Annotations
@SerialVersionUID()
Examples:
    // Define a new enumeration with a type alias and work with the full set of enumerated values
    object WeekDay extends Enumeration {
      type WeekDay = Value
      val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
    }
    import WeekDay._
    
    def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
    
    WeekDay.values filter isWorkingDay foreach println
    // output:
    // Mon
    // Tue
    // Wed
    // Thu
    // Fri
    ,
    // Example of adding attributes to an enumeration by extending the Enumeration.Val class
    object Planet extends Enumeration {
      protected case class Val(mass: Double, radius: Double) extends super.Val {
        def surfaceGravity: Double = Planet.G * mass / (radius * radius)
        def surfaceWeight(otherMass: Double): Double = otherMass * surfaceGravity
      }
      import scala.language.implicitConversions
      implicit def valueToPlanetVal(x: Value): Val = x.asInstanceOf[Val]
    
      val G: Double = 6.67300E-11
      val Mercury = Val(3.303e+23, 2.4397e6)
      val Venus   = Val(4.869e+24, 6.0518e6)
      val Earth   = Val(5.976e+24, 6.37814e6)
      val Mars    = Val(6.421e+23, 3.3972e6)
      val Jupiter = Val(1.9e+27, 7.1492e7)
      val Saturn  = Val(5.688e+26, 6.0268e7)
      val Uranus  = Val(8.686e+25, 2.5559e7)
      val Neptune = Val(1.024e+26, 2.4746e7)
    }
    
    println(Planet.values.filter(_.radius > 7.0e6))
    // output:
    // Planet.ValueSet(Jupiter, Saturn, Uranus, Neptune)

trait Equals extends Any

An interface containing operations for equality. The only method not already present in class AnyRef is canEqual.

type Equiv[T] = scala.math.Equiv[T]

type Error = java.lang.Error

type Exception = java.lang.Exception

abstract final class Float extends AnyVal

Float, a 32-bit IEEE-754 floating point number (equivalent to Java's float primitive type) is a subtype of scala.AnyVal. Instances of Float are not represented by an object in the underlying runtime system.

There is an implicit conversion from scala.Float => scala.runtime.RichFloat which provides useful non-primitive operations.

type Fractional[T] = scala.math.Fractional[T]

trait Function0[+R] extends AnyRef

A function of 0 parameters.

In the following example, the definition of javaVersion is a shorthand for the anonymous class definition anonfun0:

 object Main extends App {
   val javaVersion = () => sys.props("java.version")

   val anonfun0 = new Function0[String] {
     def apply(): String = sys.props("java.version")
   }
   assert(javaVersion() == anonfun0())
}

trait Function1[-T1, +R] extends AnyRef

A function of 1 parameter.

In the following example, the definition of succ is a shorthand for the anonymous class definition anonfun1:

 object Main extends App {
   val succ = (x: Int) => x + 1
   val anonfun1 = new Function1[Int, Int] {
     def apply(x: Int): Int = x + 1
   }
   assert(succ(0) == anonfun1(0))
}

Note that the difference between Function1 and scala.PartialFunction is that the latter can specify inputs which it will not handle.

Annotations
@implicitNotFound("No implicit view available from ${T1} => ${R}.")

trait Function10[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, +R] extends AnyRef

trait Function11[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, +R] extends AnyRef

trait Function12[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, +R] extends AnyRef

trait Function13[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, +R] extends AnyRef

trait Function14[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, +R] extends AnyRef

trait Function15[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, +R] extends AnyRef

trait Function16[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, +R] extends AnyRef

trait Function17[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, +R] extends AnyRef

trait Function18[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, -T18, +R] extends AnyRef

trait Function19[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, -T18, -T19, +R] extends AnyRef

trait Function2[-T1, -T2, +R] extends AnyRef

Функция с 2 параметрами.

В следующем примере определение max - это сокращенная запись для анонимного определения класса anonfun2:

 object Main extends App {
   val max = (x: Int, y: Int) => if (x < y) y else x

   val anonfun2 = new Function2[Int, Int, Int] {
     def apply(x: Int, y: Int): Int = if (x < y) y else x
   }
   assert(max(0, 1) == anonfun2(0, 1))
}

trait Function20[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, -T18, -T19, -T20, +R] extends AnyRef

trait Function21[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, -T18, -T19, -T20, -T21, +R] extends AnyRef

trait Function22[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, -T10, -T11, -T12, -T13, -T14, -T15, -T16, -T17, -T18, -T19, -T20, -T21, -T22, +R] extends AnyRef

trait Function3[-T1, -T2, -T3, +R] extends AnyRef

trait Function4[-T1, -T2, -T3, -T4, +R] extends AnyRef

trait Function5[-T1, -T2, -T3, -T4, -T5, +R] extends AnyRef

trait Function6[-T1, -T2, -T3, -T4, -T5, -T6, +R] extends AnyRef

trait Function7[-T1, -T2, -T3, -T4, -T5, -T6, -T7, +R] extends AnyRef

trait Function8[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, +R] extends AnyRef

trait Function9[-T1, -T2, -T3, -T4, -T5, -T6, -T7, -T8, -T9, +R] extends AnyRef

type IllegalArgumentException = java.lang.IllegalArgumentException

type IndexOutOfBoundsException = java.lang.IndexOutOfBoundsException

type IndexedSeq[+A] = scala.collection.immutable.IndexedSeq[A]

Annotations
@migration
Миграция

(Изменено в версии 2.13.0) scala.IndexedSeq теперь является scala.collection.immutable.IndexedSeq вместо scala.collection.IndexedSeq

abstract final class Int extends AnyVal

Целое число Int, 32-битное со знаком (эквивалентно примитивному типу Java int), является подтипом scala.AnyVal. Экземпляры Int не представлены объектом в подлежащей среде выполнения.

Существует неявное преобразование из scala.Int => scala.runtime.RichInt, которое предоставляет полезные операции, отличные от примитивных.

type Integral[T] = scala.math.Integral[T]

type InterruptedException = java.lang.InterruptedException

type Iterable[+A] = scala.collection.Iterable[A]

type IterableOnce[+A] = scala.collection.IterableOnce[A]

type Iterator[+A] = scala.collection.Iterator[A]

type LazyList[+A] = scala.collection.immutable.LazyList[A]

type Left[+A, +B] = scala.util.Left[A, B]

type List[+A] = scala.collection.immutable.List[A]

abstract final class Long extends AnyVal

Long, 64-битное знаковое целое число (эквивалентно примитивному типу Java long) — подтип scala.AnyVal.

Экземпляры Long не представлены объектом в подлежащей среде выполнения.

Существует неявное преобразование из scala.Long => scala.runtime.RichLong, предоставляющее полезные операции, не связанные с примитивами.

final class MatchError extends RuntimeException

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

Since

2.0

type NoSuchElementException = java.util.NoSuchElementException

final class NotImplementedError extends Error

Выбрасывание этого исключения может служить временной заменой тела метода, которое ещё не реализовано. Например, это исключение выбрасывает Predef.???.

abstract final class Nothing extends Any

Nothing — вместе с scala.Null — находится в основании иерархии типов Scala.

Nothing является подтипом любого другого типа (включая scala.Null); экземпляров этого типа не существует. Хотя тип Nothing необитаем, он тем не менее полезен в нескольких случаях. Например, в библиотеке Scala определена константа scala.collection.immutable.Nil типа List[Nothing]. Поскольку списки в Scala ковариантны, это делает scala.collection.immutable.Nil экземпляром List[T], для любого элемента типа T.

Ещё одно применение типа Nothing — это тип возвращаемого значения для методов, которые никогда не возвращают значения обычным образом. Примером является метод error в scala.sys, который всегда выбрасывает исключение.

abstract final class Null extends AnyRef

Null — вместе с scala.Nothing — находится в основании иерархии типов Scala.

Null является подтипом всех ссылочных типов; его единственным экземпляром является ссылка null. Поскольку Null не является подтипом типов значений, null не является членом ни одного такого типа. Например, нельзя присвоить null переменной типа scala.Int.

type NullPointerException = java.lang.NullPointerException

type NumberFormatException = java.lang.NumberFormatException

type Numeric[T] = scala.math.Numeric[T]

sealed abstract class Option[+A] extends IterableOnce[A] with Product with Serializable

Представляет необязательные значения. Экземпляры Option являются либо экземпляром scala.Some, либо объектом None.

Наиболее распространенный способ использования экземпляра scala.Option — это рассматривать его как коллекцию или монаду и использовать map, flatMap, filter, или foreach:

val name: Option[String] = request getParameter "name"
val upper = name map { _.trim } filter { _.length != 0 } map { _.toUpperCase }
println(upper getOrElse "")

Обратите внимание, что это эквивалентно

val upper = for {
  name <- request getParameter "name"
  trimmed <- Some(name.trim)
  upper <- Some(trimmed.toUpperCase) if trimmed.length != 0
} yield upper
println(upper getOrElse "")

Из-за того, как работает понимание for, если None возвращается из request.getParameter, все выражение приведёт к None

Это позволяет создавать сложные цепочки значений scala.Option без необходимости проверки существования значения.

Эти полезные методы существуют как для scala.Some, так и для None.

    isDefined — Истина, если не пусто isEmpty — Истина, если пусто nonEmpty — Истина, если не пусто orElse — Оценить и вернуть альтернативное необязательное значение, если пусто getOrElse — Оценить и вернуть альтернативное значение, если пусто get — Возвратить значение, выбросить исключение, если пусто fold — Применить функцию к необязательному значению, вернуть значение по умолчанию, если пусто map — Применить функцию к необязательному значению flatMap — То же, что и map, но функция должна возвращать необязательное значение foreach — Применить процедуру к значению Option collect — Применить частичное сопоставление шаблонов к необязательному значению filter — Значение Option удовлетворяет предикату filterNot — Значение Option не удовлетворяет предикату exists — Применить предикат к значению Option, иначе возвращает false, если пусто forall — Применить предикат к значению Option, иначе возвращает true, если пусто contains — Проверяет, равно ли значение значению Option, иначе возвращает false, если пусто zip — Объединить два необязательных значения для создания парного необязательного значения unzip — Разделить пару Option на два необязательных значения unzip3 — Разделить тройку Option на три необязательных значения toList — Одноэлементный список необязательного значения, в противном случае пустой список

Менее распространенный способ использования значений scala.Option — через сопоставление шаблонов:

val nameMaybe = request getParameter "name"
nameMaybe match {
  case Some(name) =>
    println(name.trim.toUppercase)
  case None =>
    println("No name value")
}

Взаимодействие с кодом, который иногда может возвращать null, безопасно оборачивается в scala.Option, чтобы стать None, а иначе scala.Some.

val abc = new java.util.HashMap[Int, String]
abc.put(1, "A")
bMaybe = Option(abc.get(2))
bMaybe match {
  case Some(b) =>
    println(s"Found $b")
  case None =>
    println("Not found")
}
Аннотации
@SerialVersionUID()
С

1.1

Примечание

Многие методы здесь дублируют методы в иерархии Traversable, но они дублируются по причине: неявное преобразование, как правило, приводит к Iterable в ситуациях, когда можно было бы сохранить Option.

тип Ordered[T] = scala.math.Ordered[T]

тип Ordering[T] = scala.math.Ordering[T]

тракт PartialFunction[-A, +B] extends (A) => B

Частичная функция типа PartialFunction[A, B] — это унарная функция, где область значений не обязательно включает все значения типа A. Функция isDefinedAt позволяет динамически проверить, находится ли значение в области значений функции.

Даже если isDefinedAt возвращает true для a: A, вызов apply(a) всё ещё может выбросить исключение, поэтому следующий код допустим:

val f: PartialFunction[Int, Any] = { case _ => 1/0 }

Ответственность за вызов isDefinedAt перед вызовом apply лежит на вызывающей стороне, потому что если isDefinedAt ложно, то не гарантируется, что apply выбросит исключение для указания состояния ошибки. Если исключение не выброшено, оценка может привести к произвольному значению.

Основное отличие между PartialFunction и scala.Function1 заключается в том, что пользователь PartialFunction может выбрать выполнение других действий с вводом, который объявлен вне его области определения. Например:

val sample = 1 to 10
val isEven: PartialFunction[Int, String] = {
  case x if x % 2 == 0 => x+" is even"
}

// the method collect can use isDefinedAt to select which members to collect
val evenNumbers = sample collect isEven

val isOdd: PartialFunction[Int, String] = {
  case x if x % 2 == 1 => x+" is odd"
}

// the method orElse allows chaining another partial function to handle
// input outside the declared domain
val numbers = sample map (isEven orElse isOdd)
С

1.0

Примечание

Необязательные функции Function, PartialFunction и объекты-экстракторы могут быть преобразованы друг в друга, как показано в следующей таблице. | Как преобразовать... | в функцию PartialFunction | в необязательную функцию Function | в экстрактор | | :---: | --- | --- | --- | | из функции PartialFunction | Predef.identity | lift | Predef.identity | | из необязательной функции Function | Function.UnliftOps#unlift или Function.unlift | Predef.identity | Function.UnliftOps#unlift | | из экстрактора | { case extractor(x) => x } | extractor.unapply _ | Predef.identity |

тип PartialOrdering[T] = scala.math.PartialOrdering[T]

тип PartiallyOrdered[T] = scala.math.PartiallyOrdered[T]

тракт Product extends Equals

Базовый трейт для всех продуктов, которые в стандартной библиотеке включают по крайней мере scala.Product1 до scala.Product22 и, следовательно, также их подклассы scala.Tuple1 до scala.Tuple22. Кроме того, все case-классы реализуют Product с синтетически генерируемыми методами.

Since

2.3

trait Product1[+T1] extends Product

Product1 is a Cartesian product of 1 component.

Since

2.3

trait Product10[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10] extends Product

Product10 is a Cartesian product of 10 components.

Since

2.3

trait Product11[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11] extends Product

Product11 is a Cartesian product of 11 components.

Since

2.3

trait Product12[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12] extends Product

Product12 is a Cartesian product of 12 components.

Since

2.3

trait Product13[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13] extends Product

Product13 is a Cartesian product of 13 components.

Since

2.3

trait Product14[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14] extends Product

Product14 is a Cartesian product of 14 components.

Since

2.3

trait Product15[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15] extends Product

Product15 is a Cartesian product of 15 components.

Since

2.3

trait Product16[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16] extends Product

Product16 is a Cartesian product of 16 components.

Since

2.3

trait Product17[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17] extends Product

Product17 is a Cartesian product of 17 components.

Since

2.3

trait Product18[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18] extends Product

Product18 is a Cartesian product of 18 components.

Since

2.3

trait Product19[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19] extends Product

Product19 is a Cartesian product of 19 components.

Since

2.3

trait Product2[+T1, +T2] extends Product

Product2 — это декартово произведение 2 компонентов.

Since

2.3

trait Product20[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20] extends Product

Product20 — это декартово произведение 20 компонентов.

Since

2.3

trait Product21[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20, +T21] extends Product

Product21 — это декартово произведение 21 компонента.

Since

2.3

trait Product22[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20, +T21, +T22] extends Product

Product22 — это декартово произведение 22 компонентов.

Since

2.3

trait Product3[+T1, +T2, +T3] extends Product

Product3 — это декартово произведение 3 компонентов.

Since

2.3

trait Product4[+T1, +T2, +T3, +T4] extends Product

Product4 — это декартово произведение 4 компонентов.

Since

2.3

trait Product5[+T1, +T2, +T3, +T4, +T5] extends Product

Product5 — это декартово произведение 5 компонентов.

Since

2.3

trait Product6[+T1, +T2, +T3, +T4, +T5, +T6] extends Product

Product6 — это декартово произведение 6 компонентов.

Since

2.3

trait Product7[+T1, +T2, +T3, +T4, +T5, +T6, +T7] extends Product

Product7 — это декартово произведение 7 компонентов.

Since

2.3

trait Product8[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8] extends Product

Product8 — это декартово произведение 8 компонентов.

Since

2.3

trait Product9[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9] extends Product

Product9 — это декартово произведение 9 компонентов.

Since

2.3

type Range = scala.collection.immutable.Range

type Right[+A, +B] = scala.util.Right[A, B]

type RuntimeException = java.lang.RuntimeException

case class ScalaReflectionException(msg: String) extends Exception with Product with Serializable

type Seq[+A] = scala.collection.immutable.Seq[A]

Annotations
@migration
Migration

(Изменено в версии 2.13.0) scala.Seq теперь scala.collection.immutable.Seq вместо scala.collection.Seq

класс SerialVersionUID extends Annotation with ConstantAnnotation

Аннотация для указания поля serialVersionUID (сериализуемого) класса.

В JVM, класс с этой аннотацией получит поле serialVersionUID, private, и static, названное serialVersionUID, со значением, указанным в value, которое механизм сериализации JVM использует для определения совместимости сериализации между различными версиями класса.

Аннотации
@deprecatedInheritance("Планируется сделать final в 2.14", "2.13.0")
См. также

java.io.Serializable

Serializable

тип Serializable = java.io.Serializable

абстрактный final класс Short extends AnyVal

Short, 16-битное знаковое целое число (эквивалентный примитивному типу short Java) является подтипом scala.AnyVal. Экземпляры Short не представлены объектом в базовой системе времени выполнения.

Существует неявное преобразование из scala.Short => scala.runtime.RichShort, которое предоставляет полезные не-примитивные операции.

final трайт Singleton extends Any

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

scala> object A { val x = 42 }
defined object A

scala> implicitly[A.type <:< Singleton]
res12: A.type <:< Singleton = generalized constraint

scala> implicitly[A.x.type <:< Singleton]
res13: A.x.type <:< Singleton = generalized constraint

scala> implicitly[42 <:< Singleton]
res14: 42 <:< Singleton = generalized constraint

scala> implicitly[Int <:< Singleton]
^
error: Cannot prove that Int <:< Singleton.

Singleton имеет специальное значение, когда появляется в качестве верхнего ограничения формального параметра типа. Обычно, вывод типов в Scala расширяет одиночные типы до базового не-одиночного типа. Когда параметр типа имеет явное верхнее ограничение Singleton, компилятор выводит одиночный тип.

scala> def check42[T](x: T)(implicit ev: T =:= 42): T = x
check42: [T](x: T)(implicit ev: T =:= 42)T

scala> val x1 = check42(42)
^
error: Cannot prove that Int =:= 42.

scala> def singleCheck42[T <: Singleton](x: T)(implicit ev: T =:= 42): T = x
singleCheck42: [T <: Singleton](x: T)(implicit ev: T =:= 42)T

scala> val x2 = singleCheck42(42)
x2: Int = 42

См. также SIP-23 о литеральных одиночных типах.

final случайный класс Some[+A](value: A) extends Option[A] with Product with Serializable

Класс Some[A] представляет существующие значения типа A.

Аннотации
@SerialVersionUID()
С

1.0

трайт Specializable extends AnyRef

Общий супертип для компаньонов специализируемых типов. Не следует расширять в пользовательском коде.

тип StringBuilder = scala.collection.mutable.StringBuilder

случайный класс StringContext(parts: String*) extends Product with Serializable

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

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

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

С

2.10.0

тип StringIndexOutOfBoundsException = java.lang.StringIndexOutOfBoundsException

final класс Symbol extends Serializable

Этот класс предоставляет простой способ получения уникальных объектов для равных строк. Поскольку символы интернированы, их можно сравнивать с помощью равенства ссылок. Экземпляры Symbol могут быть легко созданы с помощью встроенного механизма цитирования Scala.

Например, терм Scala 'mysym вызовет конструктор класса Symbol следующим образом: Symbol("mysym").

С

1.7

тип Throwable = java.lang.Throwable

final случайный класс Tuple1[+T1](_1: T1) extends Product1[T1] with Product with Serializable

Кортеж из 1 элемента; каноническое представление scala.Product1.

_1

Элемент 1 этого Tuple1

final case class Tuple10[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10) extends Product10[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10] with Product with Serializable

Кортеж из 10 элементов; каноническое представление scala.Product10.

_1

Элемент 1 этого Tuple10

_2

Элемент 2 этого Tuple10

_3

Элемент 3 этого Tuple10

_4

Элемент 4 этого Tuple10

_5

Элемент 5 этого Tuple10

_6

Элемент 6 этого Tuple10

_7

Элемент 7 этого Tuple10

_8

Элемент 8 этого Tuple10

_9

Элемент 9 этого Tuple10

_10

Элемент 10 этого Tuple10

final case class Tuple11[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11) extends Product11[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11] with Product with Serializable

Кортеж из 11 элементов; каноническое представление scala.Product11.

_1

Элемент 1 этого Tuple11

_2

Элемент 2 этого Tuple11

_3

Элемент 3 этого Tuple11

_4

Элемент 4 этого Tuple11

_5

Элемент 5 этого Tuple11

_6

Элемент 6 этого Tuple11

_7

Элемент 7 этого Tuple11

_8

Элемент 8 этого Tuple11

_9

Элемент 9 этого Tuple11

_10

Элемент 10 этого Tuple11

_11

Элемент 11 этого Tuple11

final case class Tuple12[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12) extends Product12[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12] with Product with Serializable

Кортеж из 12 элементов; каноническое представление scala.Product12.

_1

Элемент 1 этого Tuple12

_2

Элемент 2 этого Tuple12

_3

Элемент 3 этого Tuple12

_4

Элемент 4 этого Tuple12

_5

Элемент 5 этого Tuple12

_6

Элемент 6 этого Tuple12

_7

Элемент 7 этого Tuple12

_8

Элемент 8 этого Tuple12

_9

Элемент 9 этого Tuple12

_10

Элемент 10 этого Tuple12

_11

Элемент 11 этого Tuple12

_12

Элемент 12 этого Tuple12

final case class Tuple13[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13) extends Product13[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13] with Product with Serializable

Кортеж из 13 элементов; каноническое представление scala.Product13.

_1

Элемент 1 этого Tuple13

_2

Элемент 2 этого Tuple13

_3

Элемент 3 этого Tuple13

_4

Элемент 4 этого Tuple13

_5

Элемент 5 этого Tuple13

_6

Элемент 6 этого Tuple13

_7

Элемент 7 этого Tuple13

_8

Элемент 8 этого Tuple13

_9

Элемент 9 этого Tuple13

_10

Элемент 10 этого Tuple13

_11

Элемент 11 этого Tuple13

_12

Элемент 12 этого Tuple13

_13

Элемент 13 этого Tuple13

final case class Tuple14[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14) extends Product14[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14] with Product with Serializable

Кортеж из 14 элементов; каноническое представление scala.Product14.

_1

Элемент 1 этого Tuple14

_2

Элемент 2 этого Tuple14

_3

Элемент 3 этого Tuple14

_4

Элемент 4 этого Tuple14

_5

Элемент 5 этого Tuple14

_6

Элемент 6 этого Tuple14

_7

Элемент 7 этого Tuple14

_8

Элемент 8 этого Tuple14

_9

Элемент 9 этого Tuple14

_10

Элемент 10 этого Tuple14

_11

Элемент 11 этого Tuple14

_12

Элемент 12 этого Tuple14

_13

Элемент 13 этого Tuple14

_14

Элемент 14 этого Tuple14

final кортеж Tuple15[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15) extends Product15[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15] with Product with Serializable

Кортеж из 15 элементов; каноническое представление scala.Product15.

_1

Элемент 1 этого Tuple15

_2

Элемент 2 этого Tuple15

_3

Элемент 3 этого Tuple15

_4

Элемент 4 этого Tuple15

_5

Элемент 5 этого Tuple15

_6

Элемент 6 этого Tuple15

_7

Элемент 7 этого Tuple15

_8

Элемент 8 этого Tuple15

_9

Элемент 9 этого Tuple15

_10

Элемент 10 этого Tuple15

_11

Элемент 11 этого Tuple15

_12

Элемент 12 этого Tuple15

_13

Элемент 13 этого Tuple15

_14

Элемент 14 этого Tuple15

_15

Элемент 15 этого Tuple15

final кортеж Tuple16[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16) extends Product16[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16] with Product with Serializable

Кортеж из 16 элементов; каноническое представление scala.Product16.

_1

Элемент 1 этого Tuple16

_2

Элемент 2 этого Tuple16

_3

Элемент 3 этого Tuple16

_4

Элемент 4 этого Tuple16

_5

Элемент 5 этого Tuple16

_6

Элемент 6 этого Tuple16

_7

Элемент 7 этого Tuple16

_8

Элемент 8 этого Tuple16

_9

Элемент 9 этого Tuple16

_10

Элемент 10 этого Tuple16

_11

Элемент 11 этого Tuple16

_12

Элемент 12 этого Tuple16

_13

Элемент 13 этого Tuple16

_14

Элемент 14 этого Tuple16

_15

Элемент 15 этого Tuple16

_16

Элемент 16 этого Tuple16

final case class Tuple17[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17) extends Product17[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17] with Product with Serializable

Кортеж из 17 элементов; каноническое представление scala.Product17.

_1

Элемент 1 этого Tuple17

_2

Элемент 2 этого Tuple17

_3

Элемент 3 этого Tuple17

_4

Элемент 4 этого Tuple17

_5

Элемент 5 этого Tuple17

_6

Элемент 6 этого Tuple17

_7

Элемент 7 этого Tuple17

_8

Элемент 8 этого Tuple17

_9

Элемент 9 этого Tuple17

_10

Элемент 10 этого Tuple17

_11

Элемент 11 этого Tuple17

_12

Элемент 12 этого Tuple17

_13

Элемент 13 этого Tuple17

_14

Элемент 14 этого Tuple17

_15

Элемент 15 этого Tuple17

_16

Элемент 16 этого Tuple17

_17

Элемент 17 этого Tuple17

final case class Tuple18[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17, _18: T18) extends Product18[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18] with Product with Serializable

Кортеж из 18 элементов; каноническое представление scala.Product18.

_1

Элемент 1 этого Tuple18

_2

Элемент 2 этого Tuple18

_3

Элемент 3 этого Tuple18

_4

Элемент 4 этого Tuple18

_5

Элемент 5 этого Tuple18

_6

Элемент 6 этого Tuple18

_7

Элемент 7 этого Tuple18

_8

Элемент 8 этого Tuple18

_9

Элемент 9 этого Tuple18

_10

Элемент 10 этого Tuple18

_11

Элемент 11 этого Tuple18

_12

Элемент 12 этого Tuple18

_13

Элемент 13 этого Tuple18

_14

Элемент 14 этого Tuple18

_15

Элемент 15 этого Tuple18

_16

Элемент 16 этого Tuple18

_17

Элемент 17 этого Tuple18

_18

Элемент 18 этого Tuple18

final кортеж-класс Tuple19[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17, _18: T18, _19: T19) extends Product19[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19] with Product with Serializable

Кортеж из 19 элементов; каноническое представление scala.Product19.

_1

Элемент 1 этого Tuple19

_2

Элемент 2 этого Tuple19

_3

Элемент 3 этого Tuple19

_4

Элемент 4 этого Tuple19

_5

Элемент 5 этого Tuple19

_6

Элемент 6 этого Tuple19

_7

Элемент 7 этого Tuple19

_8

Элемент 8 этого Tuple19

_9

Элемент 9 этого Tuple19

_10

Элемент 10 этого Tuple19

_11

Элемент 11 этого Tuple19

_12

Элемент 12 этого Tuple19

_13

Элемент 13 этого Tuple19

_14

Элемент 14 этого Tuple19

_15

Элемент 15 этого Tuple19

_16

Элемент 16 этого Tuple19

_17

Элемент 17 этого Tuple19

_18

Элемент 18 этого Tuple19

_19

Элемент 19 этого Tuple19

final кортеж-класс Tuple2[+T1, +T2](_1: T1, _2: T2) extends Product2[T1, T2] with Product with Serializable

Кортеж из 2 элементов; каноническое представление scala.Product2.

_1

Элемент 1 этого Tuple2

_2

Элемент 2 этого Tuple2

final кортеж-класс Tuple20[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17, _18: T18, _19: T19, _20: T20) extends Product20[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20] with Product with Serializable

Кортеж из 20 элементов; каноническое представление scala.Product20.

_1

Элемент 1 этого Tuple20

_2

Элемент 2 этого Tuple20

_3

Элемент 3 этого Tuple20

_4

Элемент 4 этого Tuple20

_5

Элемент 5 этого Tuple20

_6

Элемент 6 этого Tuple20

_7

Элемент 7 этого Tuple20

_8

Элемент 8 этого Tuple20

_9

Элемент 9 этого Tuple20

_10

Элемент 10 этого Tuple20

_11

Элемент 11 этого Tuple20

_12

Элемент 12 этого Tuple20

_13

Элемент 13 этого Tuple20

_14

Элемент 14 этого Tuple20

_15

Элемент 15 этого Tuple20

_16

Элемент 16 этого Tuple20

_17

Элемент 17 этого Tuple20

_18

Элемент 18 этого Tuple20

_19

Элемент 19 этого Tuple20

_20

Элемент 20 этого Tuple20

final case class Tuple21[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20, +T21](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17, _18: T18, _19: T19, _20: T20, _21: T21) extends Product21[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21] with Product with Serializable

Кортеж из 21 элемента; каноническое представление scala.Product21.

_1

Элемент 1 этого Tuple21

_2

Элемент 2 этого Tuple21

_3

Элемент 3 этого Tuple21

_4

Элемент 4 этого Tuple21

_5

Элемент 5 этого Tuple21

_6

Элемент 6 этого Tuple21

_7

Элемент 7 этого Tuple21

_8

Элемент 8 этого Tuple21

_9

Элемент 9 этого Tuple21

_10

Элемент 10 этого Tuple21

_11

Элемент 11 этого Tuple21

_12

Элемент 12 этого Tuple21

_13

Элемент 13 этого Tuple21

_14

Элемент 14 этого Tuple21

_15

Элемент 15 этого Tuple21

_16

Элемент 16 этого Tuple21

_17

Элемент 17 этого Tuple21

_18

Элемент 18 этого Tuple21

_19

Элемент 19 этого Tuple21

_20

Элемент 20 этого Tuple21

_21

Элемент 21 этого Tuple21

final case class Tuple22[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9, +T10, +T11, +T12, +T13, +T14, +T15, +T16, +T17, +T18, +T19, +T20, +T21, +T22](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9, _10: T10, _11: T11, _12: T12, _13: T13, _14: T14, _15: T15, _16: T16, _17: T17, _18: T18, _19: T19, _20: T20, _21: T21, _22: T22) extends Product22[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22] with Product with Serializable

Кортеж из 22 элементов; каноническое представление scala.Product22.

_1

Элемент 1 этого Tuple22

_2

Элемент 2 этого Tuple22

_3

Элемент 3 этого Tuple22

_4

Элемент 4 этого Tuple22

_5

Элемент 5 этого Tuple22

_6

Элемент 6 этого Tuple22

_7

Элемент 7 этого Tuple22

_8

Элемент 8 этого Tuple22

_9

Элемент 9 этого Tuple22

_10

Элемент 10 этого Tuple22

_11

Элемент 11 этого Tuple22

_12

Элемент 12 этого Tuple22

_13

Элемент 13 этого Tuple22

_14

Элемент 14 этого Tuple22

_15

Элемент 15 этого Tuple22

_16

Элемент 16 этого Tuple22

_17

Элемент 17 этого Tuple22

_18

Элемент 18 этого Tuple22

_19

Элемент 19 этого Tuple22

_20

Элемент 20 этого Tuple22

_21

Элемент 21 этого Tuple22

_22

Элемент 22 этого Tuple22

final case class Tuple3[+T1, +T2, +T3](_1: T1, _2: T2, _3: T3) extends Product3[T1, T2, T3] with Product with Serializable

Кортеж из 3 элементов; каноническое представление scala.Product3.

_1

Элемент 1 этого Tuple3

_2

Элемент 2 этого Tuple3

_3

Элемент 3 этого Tuple3

final case class Tuple4[+T1, +T2, +T3, +T4](_1: T1, _2: T2, _3: T3, _4: T4) extends Product4[T1, T2, T3, T4] with Product with Serializable

Кортеж из 4 элементов; каноническое представление scala.Product4.

_1

Элемент 1 этого Tuple4

_2

Элемент 2 этого Tuple4

_3

Элемент 3 этого Tuple4

_4

Элемент 4 этого Tuple4

final case class Tuple5[+T1, +T2, +T3, +T4, +T5](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5) extends Product5[T1, T2, T3, T4, T5] with Product with Serializable

Кортеж из 5 элементов; каноническое представление scala.Product5.

_1

Элемент 1 этого Tuple5

_2

Элемент 2 этого Tuple5

_3

Элемент 3 этого Tuple5

_4

Элемент 4 этого Tuple5

_5

Элемент 5 этого Tuple5

final case class Tuple6[+T1, +T2, +T3, +T4, +T5, +T6](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6) extends Product6[T1, T2, T3, T4, T5, T6] with Product with Serializable

Кортеж из 6 элементов; каноническое представление scala.Product6.

_1

Элемент 1 этого Tuple6

_2

Элемент 2 этого Tuple6

_3

Элемент 3 этого Tuple6

_4

Элемент 4 этого Tuple6

_5

Элемент 5 этого Tuple6

_6

Элемент 6 этого Tuple6

final case class Tuple7[+T1, +T2, +T3, +T4, +T5, +T6, +T7](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7) extends Product7[T1, T2, T3, T4, T5, T6, T7] with Product with Serializable

Кортеж из 7 элементов; каноническое представление scala.Product7.

_1

Элемент 1 этого Tuple7

_2

Элемент 2 этого Tuple7

_3

Элемент 3 этого Tuple7

_4

Элемент 4 этого Tuple7

_5

Элемент 5 этого Tuple7

_6

Элемент 6 этого Tuple7

_7

Элемент 7 этого Tuple7

final case class Tuple8[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8) extends Product8[T1, T2, T3, T4, T5, T6, T7, T8] with Product with Serializable

Кортеж из 8 элементов; каноническое представление scala.Product8.

_1

Элемент 1 этого Tuple8

_2

Элемент 2 этого Tuple8

_3

Элемент 3 этого Tuple8

_4

Элемент 4 этого Tuple8

_5

Элемент 5 этого Tuple8

_6

Элемент 6 этого Tuple8

_7

Элемент 7 этого Tuple8

_8

Элемент 8 этого Tuple8

final case class Tuple9[+T1, +T2, +T3, +T4, +T5, +T6, +T7, +T8, +T9](_1: T1, _2: T2, _3: T3, _4: T4, _5: T5, _6: T6, _7: T7, _8: T8, _9: T9) extends Product9[T1, T2, T3, T4, T5, T6, T7, T8, T9] with Product with Serializable

Кортеж из 9 элементов; каноническое представление scala.Product9.

_1

Элемент 1 этого Tuple9

_2

Элемент 2 этого Tuple9

_3

Элемент 3 этого Tuple9

_4

Элемент 4 этого Tuple9

_5

Элемент 5 этого Tuple9

_6

Элемент 6 этого Tuple9

_7

Элемент 7 этого Tuple9

_8

Элемент 8 этого Tuple9

_9

Элемент 9 этого Tuple9

final case class UninitializedFieldError(msg: String) extends RuntimeException with Product with Serializable

Этот класс реализует ошибки, которые выбрасываются всякий раз, когда поле используется до его инициализации.

Такие проверки во время выполнения не включаются по умолчанию. Их можно включить с помощью опции компилятора -Xcheckinit.

Since

2.7

abstract final class Unit extends AnyVal

Unit является подтипом scala.AnyVal. Существует только одно значение типа Unit, (), и оно не представлено каким-либо объектом в базовой среде выполнения. Метод с типом возвращаемого значения Unit аналогичен методу Java, который объявлен void.

type UnsupportedOperationException = java.lang.UnsupportedOperationException

final class ValueOf[T] extends AnyVal

ValueOf[T] предоставляет единственное значение типа T, где T — тип, имеющий единственного представителя. Квалифицируемые типы — это одиночные типы вида stablePath.type, Unit и одиночные типы, соответствующие литералам значений.

Экземпляры ValueOf[T] предоставляются неявно для всех допустимых типов. Обычно экземпляр требуется, когда необходимо значение времени выполнения, соответствующее вычислению на уровне типов.

Например, мы можем определить тип Residue[M <: Int], соответствующий группе целых чисел по модулю M. Мы можем затем потребовать, чтобы остатки могли суммироваться только тогда, когда они параметризованы одним и тем же модулем,

case class Residue[M <: Int](n: Int) extends AnyVal {
  def +(rhs: Residue[M])(implicit m: ValueOf[M]): Residue[M] =
    Residue((this.n + rhs.n) % valueOf[M])
}

val fiveModTen = Residue[10](5)
val nineModTen = Residue[10](9)

fiveModTen + nineModTen    // OK == Residue[10](4)

val fourModEleven = Residue[11](4)

fiveModTen + fourModEleven // compiler error: type mismatch;
                           //   found   : Residue[11]
                           //   required: Residue[10]

Обратите внимание, что здесь модуль закодирован в типе значений, поэтому не требует дополнительных затрат на хранение для каждого значения. Когда в реализации + требуется значение времени выполнения модуля, оно предоставляется в месте вызова с помощью неявного аргумента m типа ValueOf[M].

Annotations
@implicitNotFound("Нет доступного одиночного значения для ${T}.")

type Vector[+A] = scala.collection.immutable.Vector[A]

class deprecated extends Annotation with StaticAnnotation

Аннотация, которая указывает, что определение устарело. При использовании аннотированного определения выводится предупреждение об устаревании.

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

Авторы библиотек должны преобразовывать имя своей библиотеки с номером версии, чтобы помочь разработчикам различать устаревшие определения, поступающие из разных библиотек:

@deprecated("this method will be removed", "FooLib 12.0")
def oldMethod(x: Int) = ...

Компилятор будет выводить предупреждения об устаревании, сгруппированные по библиотеке и версии:

oldMethod(1)
oldMethod(2)
aDeprecatedMethodFromLibraryBar(3, 4)

// warning: there was one deprecation warning (since BarLib 3.2)
// warning: there were two deprecation warnings (since FooLib 12.0)
// warning: there were three deprecation warnings in total; re-run with -deprecation for details

@deprecated в языке Scala и его стандартной библиотеке

Устаревшее элемент языка Scala или определение в стандартной библиотеке Scala будет сохраняться по крайней мере на протяжении текущей основной версии.

Это означает, что элемент, устаревший в каком-то релизе 2.13.x, будет сохраняться во всех релизах 2.13.x, но может быть удален в 2.14. (Устаревший элемент может сохраняться дольше для упрощения миграции, но разработчики не должны полагаться на это.)

Annotations
@getter() @setter() @beanGetter() @beanSetter() @deprecatedInheritance("Планируется сделать final в 2.14", "2.13.0")
Since

2.3

См. также

Официальная документация по совместимости двоичных файлов.

scala.deprecatedInheritance

scala.deprecatedOverriding

scala.deprecatedName

final class deprecatedInheritance extends Annotation with StaticAnnotation

Аннотация, которая указывает, что наследование от класса устарело.

Это обычно делается для предупреждения о том, что нефинальный класс будет сделать финальным в будущей версии. Наследование от такого класса генерирует предупреждение.

Предупреждения не генерируются, если подкласс находится в одном файле компиляции.

Авторы библиотек должны указать политику устаревания своей библиотеки в документации, чтобы дать разработчикам руководство по тому, когда тип, помеченный аннотацией @deprecatedInheritance, будет final.

Авторы библиотек должны преобразовывать имя своей библиотеки с номером версии, чтобы помочь разработчикам различать устаревшие определения, поступающие из разных библиотек:

@deprecatedInheritance("this class will be made final", "FooLib 12.0")
class Foo
val foo = new Foo     // no deprecation warning
class Bar extends Foo
// warning: inheritance from class Foo is deprecated (since FooLib 12.0): this class will be made final
// class Bar extends Foo
//                   ^
Annotations
@getter() @setter() @beanGetter() @beanSetter()
Since

2.10

См. также

scala.deprecated

scala.deprecatedOverriding

scala.deprecatedName

class deprecatedName extends Annotation with StaticAnnotation

Аннотация, обозначающая, что имя параметра устарело.

Использование этого имени в именованном аргументе генерирует предупреждение об устаревании.

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

Авторы библиотек должны добавлять имя своей библиотеки к номеру версии, чтобы помочь разработчикам отличать устаревания, поступающие из разных библиотек:

def inc(x: Int, @deprecatedName("y", "FooLib 12.0") n: Int): Int = x + n
inc(1, y = 2)

выдаст следующее предупреждение:

warning: the parameter name y is deprecated (since FooLib 12.0): use n instead
inc(1, y = 2)
         ^
Annotations
@param() @deprecatedInheritance("Scheduled for being final in 2.14", "2.13.0")
Since

2.8.1

See also

scala.deprecated

scala.deprecatedInheritance

scala.deprecatedOverriding

class deprecatedOverriding extends Annotation with StaticAnnotation

Аннотация, обозначающая, что переопределение члена устарело.

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

Авторы библиотек должны указывать политику устаревания библиотеки в своей документации, чтобы дать разработчикам рекомендации о том, когда метод, помеченный @deprecatedOverriding, будет final.

Авторы библиотек должны добавлять имя своей библиотеки к номеру версии, чтобы помочь разработчикам отличать устаревания, поступающие из разных библиотек:

class Foo {
  @deprecatedOverriding("this method will be made final", "FooLib 12.0")
  def add(x: Int, y: Int) = x + y
}
class Bar extends Foo // no deprecation warning
class Baz extends Foo {
  override def add(x: Int, y: Int) = x - y
}
// warning: overriding method add in class Foo is deprecated (since FooLib 12.0): this method will be made final
// override def add(x: Int, y: Int) = x - y
//              ^
Annotations
@getter() @setter() @beanGetter() @beanSetter() @deprecatedInheritance("Scheduled for being final in 2.14", "2.13.0")
Since

2.10

See also

scala.deprecated

scala.deprecatedInheritance

scala.deprecatedName

class inline extends Annotation with StaticAnnotation

Аннотация для методов, которые оптимизатор должен встраивать.

Обратите внимание, что по умолчанию оптимизатор Scala отключен и никакие вызовы не встраиваются. См. -opt:help для информации о том, как включить оптимизатор и встраиватель.

Когда встраивание включено, встраиватель всегда будет пытаться встраивать методы или вызовы, помеченные @inline (при условии, что встраивание из определяющего класса разрешено, см. -opt-inline-from:help). Если встраивание невозможно, например, потому что метод не является окончательным, будет выдано предупреждение оптимизатора. См. -opt-warnings:help для подробностей.

Примеры:

@inline   final def f1(x: Int) = x
@noinline final def f2(x: Int) = x
          final def f3(x: Int) = x

 def t1 = f1(1)              // inlined if possible
 def t2 = f2(1)              // not inlined
 def t3 = f3(1)              // may be inlined (the inliner heuristics can select the callsite)
 def t4 = f1(1): @noinline   // not inlined (override at callsite)
 def t5 = f2(1): @inline     // inlined if possible (override at callsite)
 def t6 = f3(1): @inline     // inlined if possible
 def t7 = f3(1): @noinline   // not inlined
}

Примечание: скобки необходимы при аннотировании вызова в более сложном выражении.

def t1 = f1(1) + f1(1): @noinline   // equivalent to (f1(1) + f1(1)): @noinline
def t2 = f1(1) + (f1(1): @noinline) // the second call to f1 is not inlined
Annotations
@deprecatedInheritance("Scheduled for being final in 2.14", "2.13.0")

class native extends Annotation with StaticAnnotation

Маркер для нативных методов.

@native def f(x: Int, y: List[Long]): String = ...

Метод @native компилируется в нативный метод платформы, при этом отбрасывается тело метода (если оно есть). Тело будет проверено на соответствие типу, если оно присутствует.

Метод, помеченный @native, должен быть членом класса, а не трейта (начиная с 2.12).

Annotations
@deprecatedInheritance("Scheduled for being final in 2.14", "2.13.0")
Since

2.6

final class noinline extends Annotation with StaticAnnotation

Аннотация для методов, которые оптимизатор не должен встраивать.

Обратите внимание, что по умолчанию оптимизатор Scala отключен и никакие вызовы не встраиваются. См. -opt:help для информации о том, как включить оптимизатор и встраиватель.

Когда встраивание включено, встраиватель никогда не будет встраивать методы или вызовы, помеченные @noinline.

Примеры:

@inline   final def f1(x: Int) = x
@noinline final def f2(x: Int) = x
          final def f3(x: Int) = x

 def t1 = f1(1)              // inlined if possible
 def t2 = f2(1)              // not inlined
 def t3 = f3(1)              // may be inlined (the inliner heuristics can select the callsite)
 def t4 = f1(1): @noinline   // not inlined (override at callsite)
 def t5 = f2(1): @inline     // inlined if possible (override at callsite)
 def t6 = f3(1): @inline     // inlined if possible
 def t7 = f3(1): @noinline   // not inlined
}

Примечание: скобки необходимы при аннотировании вызова в более сложном выражении.

def t1 = f1(1) + f1(1): @noinline   // equivalent to (f1(1) + f1(1)): @noinline
def t2 = f1(1) + (f1(1): @noinline) // the second call to f1 is not inlined

final class specialized extends Annotation with StaticAnnotation

Аннотировать параметры типа, на которых код должен быть автоматически специализирован. Например:

class MyList[@specialized T] ...

Тип T может быть специализирован на подмножестве примитивных типов, указав список примитивных типов для специализации:

class MyList[@specialized(Int, Double, Boolean) T] ..
Since

2.8

final class throws[T <: Throwable] extends Annotation with StaticAnnotation

Аннотация для указания исключений, выбрасываемых методом. Например:

class Reader(fname: String) {
  private val in = new BufferedReader(new FileReader(fname))
  @throws[IOException]("if the file doesn't exist")
  def read() = in.read()
}
Since

2.1

final класс transient extends Annotation with StaticAnnotation

Аннотации
@field()

final класс unchecked extends Annotation

Аннотация, обозначающая, что анотированный элемент не должен рассматриваться для дополнительных проверок компилятором. Конкретные применения включают аннотирование объекта выражения сопоставления для подавления предупреждений об исчерпываемости и аннотирование аргумента типа в случае сопоставления для подавления предупреждений об unchecked ошибках.

Такое подавление следует использовать с осторожностью, без него могут возникнуть scala.MatchError или java.lang.ClassCastException во время выполнения. В большинстве случаев можно и следует устранить предупреждение вместо его подавления.

object Test extends App {
  // This would normally warn "match is not exhaustive"
  // because `None` is not covered.
  def f(x: Option[String]) = (x: @unchecked) match { case Some(y) => y }
  // This would normally warn "type pattern is unchecked"
  // but here will blindly cast the head element to String.
  def g(xs: Any) = xs match { case x: List[String @unchecked] => x.head }
}
С момента

2.4

final класс volatile extends Annotation with StaticAnnotation

Аннотации
@field()

Члены-значения

val +:: scala.collection.+:.type

val :+: scala.collection.:+.type

val ::: scala.collection.immutable.::.type

val AnyRef: Specializable

val BigDecimal: scala.math.BigDecimal.type

val BigInt: scala.math.BigInt.type

val Either: scala.util.Either.type

val Equiv: scala.math.Equiv.type

val Fractional: scala.math.Fractional.type

val IndexedSeq: scala.collection.immutable.IndexedSeq.type

val Integral: scala.math.Integral.type

val Iterable: scala.collection.Iterable.type

val Iterator: scala.collection.Iterator.type

val LazyList: scala.collection.immutable.LazyList.type

val Left: scala.util.Left.type

val List: scala.collection.immutable.List.type

val Nil: scala.collection.immutable.Nil.type

val Numeric: scala.math.Numeric.type

val Ordered: scala.math.Ordered.type

val Ordering: scala.math.Ordering.type

val Range: scala.collection.immutable.Range.type

val Right: scala.util.Right.type

val Seq: scala.collection.immutable.Seq.type

val StringBuilder: scala.collection.mutable.StringBuilder.type

val Vector: scala.collection.immutable.Vector.type

object #::

object <:< extends java.io.Serializable

object Array extends java.io.Serializable

Утилитарные методы для работы с массивами. Например:

val a = Array(1, 2)
val b = Array.ofDim[Int](2)
val c = Array.concat(a, b)

где объекты массивов a, b и c соответственно имеют значения Array(1, 2), Array(0, 0) и Array(1, 2, 0, 0).

Since

1.0

object Boolean extends AnyValCompanion

object Byte extends AnyValCompanion

object Char extends AnyValCompanion

object Console extends AnsiColor

Реализует функциональность для вывода значений Scala в терминал. Для чтения значений используйте StdIn. Также определяет константы для форматирования текста в терминалах ANSI.

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

Используйте методы print для вывода текста.

scala> Console.printf(
  "Today the outside temperature is a balmy %.1f°C. %<.1f°C beats the previous record of %.1f°C.\n",
  -137.0,
  -135.05)
Today the outside temperature is a balmy -137.0°C. -137.0°C beats the previous record of -135.1°C.

Коды ANSI

Используйте коды ANSI для изменения цвета вывода в консоль на STDOUT или STDERR.

import Console.{GREEN, RED, RESET, YELLOW_B, UNDERLINED}

object PrimeTest {

  def isPrime(): Unit = {

    val candidate = io.StdIn.readInt().ensuring(_ > 1)

    val prime = (2 to candidate - 1).forall(candidate % _ != 0)

    if (prime)
      Console.println(s"${RESET}${GREEN}yes${RESET}")
    else
      Console.err.println(s"${RESET}${YELLOW_B}${RED}${UNDERLINED}NO!${RESET}")
  }

  def main(args: Array[String]): Unit = isPrime()

}
$ scala PrimeTest
1234567891
да
$ scala PrimeTest
56474
НЕТ!

Переопределение ввода-вывода

Используйте переопределение ввода-вывода для временной замены потоков ввода и/или вывода. В этом примере метод, основанный на потоке, обернут в функцию.

import java.io.{ByteArrayOutputStream, StringReader}

object FunctionalPrimeTest {

  def isPrime(candidate: Int): Boolean = {

    val input = new StringReader(s"$candidate\n")
    val outCapture = new ByteArrayOutputStream
    val errCapture = new ByteArrayOutputStream

    Console.withIn(input) {
      Console.withOut(outCapture) {
        Console.withErr(errCapture) {
          PrimeTest.isPrime()
        }
      }
    }

    if (outCapture.toByteArray.nonEmpty) // "yes"
      true
    else if (errCapture.toByteArray.nonEmpty) // "NO!"
      false
    else throw new IllegalArgumentException(candidate.toString)
  }

  def main(args: Array[String]): Unit = {
    val primes = (2 to 50) filter (isPrime)
    println(s"First primes: $primes")
  }

}
$ scala FunctionalPrimeTest
Первые простые числа: Vector(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47)
Since

1.0

объект Double extends AnyValCompanion

объект DummyImplicit

объект Float extends AnyValCompanion

объект Function

Модуль, определяющий служебные методы для функционального программирования высшего порядка.

Since

1.0

объект Function1

объект Int extends AnyValCompanion

объект Long extends AnyValCompanion

объект None extends Option[Nothing] with Product with Serializable

Этот объект case представляет несуществующие значения.

Annotations
@SerialVersionUID()
Since

1.0

объект Option extends java.io.Serializable

объект PartialFunction

Несколько полезных операций, которые используют дополнительную информацию, доступную в частичных функциях. Примеры:

import PartialFunction._

def strangeConditional(other: Any): Boolean = cond(other) {
  case x: String if x == "abc" || x == "def"  => true
  case x: Int => true
}
def onlyInt(v: Any): Option[Int] = condOpt(v) { case x: Int => x }
Since

2.8

объект Predef extends LowPriorityImplicits

Объект Predef предоставляет определения, доступные во всех единицах компиляции Scala без явного квалификатора.

Типы, обычно используемые

Predef предоставляет псевдонимы типов для типов, которые обычно используются, такие как неизменяемые типы коллекций scala.collection.immutable.Map, scala.collection.immutable.Set и конструкторы scala.collection.immutable.List (scala.collection.immutable.:: и scala.collection.immutable.Nil).

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

Для базового вывода в консоль, 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.

объект Product1

объект Product10

объект Product11

объект Product12

объект Product13

объект Product14

объект Product15

объект Product16

объект Product17

объект Product18

объект Product19

объект Product2

объект Product20

объект Product21

объект Product22

объект Product3

объект Product4

объект Product5

объект Product6

объект Product7

объект Product8

объект Product9

объект Short расширяет AnyValCompanion

объект Specializable

объект StringContext расширяет java.io.Serializable

объект Symbol расширяет UniquenessCache[String, Symbol] с java.io.Serializable

объект Unit расширяет AnyValCompanion

Аннотации
@compileTimeOnly("`Unit` companion object is not allowed in source; instead, use `()` for the unit value")

объект language

Объект scala.language управляет доступными программисту языковыми возможностями, как предложено в документе SIP-18.

Каждая из этих возможностей должна быть явно импортирована в текущий контекст, чтобы стать доступной:

import language.postfixOps // or language._
List(1, 2, 3) reverse

Доступные языковые возможности:

    dynamics позволяет определять переписывание вызовов с использованием Dynamic existentials позволяет писать экзистенциальные типы higherKinds позволяет писать типы высшего порядка implicitConversions позволяет определять неявные методы и члены postfixOps позволяет использовать постфиксные операторы (не рекомендуется) reflectiveCalls позволяет использовать структурные типы experimental содержит более новые возможности, которые еще не были протестированы в производстве

объект languageFeature

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/index.html

Spec-Zone.ru

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