Spec-Zone.ru › Scala 2.12 Library

Трейт scala.PartialFunction

Компаньон объект PartialFunction

трейт 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)
Тип объекта
PartialFunction[A, B]
Источник
PartialFunction.scala
С тех пор

1.0

Линейные надтипы
Известные подклассы

Абстрактные значения членов

абстрактный def apply(v1: A): B

Применяет тело этой функции к аргументу.

возвращает

результат применения функции.

Определяющие классы
Function1

абстрактный def isDefinedAt(x: A): Boolean

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

x

значение для проверки

возвращает

true, если x находится в области определения этой функции, false в противном случае.

Члены конкретных значений

final def !=(arg0: Any): Boolean

Проверка двух объектов на неравенство.

возвращает

true если !(this == that), в противном случае false.

Определяющие классы
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode за исключением упакованных числовых типов и null. Для чисел возвращает значение хэш-кода, согласованное с равенством значений: если два экземпляра типа значения сравниваются как true, тогда ## для каждого из них выдает одно и то же значение хэш-кода. Для null возвращает хэш-код, где null.hashCode выбрасывает NullPointerException.

возвращает

значение хэш-кода, согласованное с ==

Определяющие классы
AnyRef → Any

def +(other: String): String

Неявный
Этот член добавлен неявным преобразованием из PartialFunction[A, B] в any2stringadd[PartialFunction[A, B]] с помощью метода any2stringadd в scala.Predef.
Определяющие классы
any2stringadd

def ->[B](y: B): (PartialFunction[A, B], B)

Неявный
Этот член добавлен неявным преобразованием из PartialFunction[A, B] в ArrowAssoc[PartialFunction[A, B]] с помощью метода ArrowAssoc в scala.Predef.
Определяющие классы
ArrowAssoc
Аннотации
@inline()

final def ==(arg0: Any): Boolean

Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).

возвращает

true если объект-получатель эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def andThen[C](k: (B) ⇒ C): PartialFunction[A, C]

Компонует эту частичную функцию с функцией преобразования, которая применяется к результатам этой частичной функции.

C

тип результата функции преобразования.

k

функция преобразования

возвращает

частичная функция с тем же областью определения, что и эта частичная функция, которая сопоставляет аргументы x с k(this(x)).

Определяющие классы
PartialFunction → Function1

def applyOrElse[A1 <: A, B1 >: B](x: A1, default: (A1) ⇒ B1): B1

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

Обратите внимание, что выражение pf.applyOrElse(x, default) эквивалентно

if(pf isDefinedAt x) pf(x) else default(x)

за исключением того, что applyOrElse метод может быть реализован более эффективно. Для всех частичных функций-литералов компилятор генерирует реализацию applyOrElse, которая избегает двойного вычисления совпадений шаблонов и условий. Это делает applyOrElse основой эффективной реализации для многих операций и сценариев, таких как:

    комбинирование частичных функций в orElse/andThen цепочки не приводит к чрезмерному apply/isDefinedAt вычислению lift и unlift не вычисляют исходные функции дважды при каждом вызове runWith позволяет эффективно комбинировать частичные функции императивным стилем с условно применяемыми действиями

Для нелитеральных классов частичных функций с нетривиальным методом isDefinedAt рекомендуется переопределить метод applyOrElse с пользовательской реализацией, которая избегает двойного isDefinedAt вычисления. Это может привести к лучшей производительности и более предсказуемому поведению с точки зрения побочных эффектов.

x

аргумент функции

default

функция по умолчанию

возвращает

результат применения этой функции или функции по умолчанию.

С

2.10

final def asInstanceOf[T0]: T0

Преобразовать объект-получатель к типу T0.

Обратите внимание, что успех преобразования во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] вызовет исключение ClassCastException во время выполнения, а выражение List(1).asInstanceOf[List[String]] — нет. В последнем примере, поскольку тип аргумента стирается при компиляции, проверить, относятся ли содержимое списка к запрошенному типу, невозможно.

возвращает

объект-получатель.

Определяющие классы
Any
Исключения

ClassCastException, если объект-получатель не является экземпляром стирания типа T0.

def clone(): AnyRef

Создать копию объекта-получателя.

По умолчанию реализация метода clone зависит от платформы.

returns

копия объекта-получателя.

Атрибуты
protected[lang]
Определяющие классы
AnyRef
Аннотации
@throws( ... ) @native()
Примечание

не указано SLS как член AnyRef

def compose[A](g: (A) ⇒ A): (A) ⇒ B

Компонует два экземпляра Function1 в новый Function1, применяя этот функцию последней.

A

тип, к которому можно применить функцию g

g

функция A => T1

returns

новая функция f, такая что f(x) == apply(g(x))

Определяющие классы
Function1
Аннотации
@unspecialized()

def ensuring(cond: (PartialFunction[A, B]) ⇒ Boolean, msg: ⇒ Any): PartialFunction[A, B]

Неявный
Этот член добавлен неявным преобразованием из PartialFunction[A, B] в Ensuring[PartialFunction[A, B]] с помощью метода Ensuring в scala.Predef.
Определяющие классы
Ensuring

def ensuring(cond: (PartialFunction[A, B]) ⇒ Boolean): PartialFunction[A, B]

Неявный
...

def ensuring(cond: Boolean, msg: ⇒ Any): PartialFunction[A, B]

Неявный
...

def ensuring(cond: Boolean): PartialFunction[A, B]

Неявный
...

final def eq(arg0: AnyRef): Boolean

Проверяет, является ли аргумент (that) ссылкой на объект-получатель (this).

Метод eq реализует отношение эквивалентности на не-null экземплярах AnyRef, и обладает тремя дополнительными свойствами:

    Он согласован: для любых не-null экземпляров x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false.Для любого не-null экземпляра x типа AnyRef, x.eq(null) и null.eq(x) возвращают false. null.eq(null) возвращает true.

При переопределении методов equals или hashCode важно обеспечить согласованность их поведения с равенством ссылок. Следовательно, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и должны иметь одинаковое значение хеша (o1.hashCode == o2.hashCode).

returns

true если аргумент является ссылкой на объект-получатель; false в противном случае.

Определяющие классы
AnyRef

def equals(arg0: Any): Boolean

Метод равенства для ссылочных типов. Реализация по умолчанию делегирует eq.

См. также equals в scala.Any.

returns

true если объект-получатель эквивалентен аргументу; false в противном случае.

Определяющие классы
AnyRef → Any

def finalize(): Unit

Вызывается сборщиком мусора для объекта-получателя, когда на объект больше нет ссылок.

Подробности о том, когда и будет ли вызываться метод finalize, а также взаимодействие между finalize и возвратами/исключениями за пределами текущей области, зависят от платформы.

Атрибуты
protected[lang]
Классы определения
AnyRef
Аннотации
@throws( classOf[java.lang.Throwable] )
Примечание

не указан SLS как член AnyRef

def formatted(fmtstr: String): String

Возвращает строку, отформатированную согласно заданной строке format. Формат строк аналогичен String.format (@see java.lang.String.format).

Неявный
Этот член добавляется неявным преобразованием из PartialFunction[A, B] в StringFormat[PartialFunction[A, B]] с помощью метода StringFormat в scala.Predef.
Классы определения
StringFormat
Аннотации
@inline()

final def getClass(): Class[_]

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

возвращает

объект класса, соответствующий типу получателя во время выполнения.

Классы определения
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Метод hashCode для ссылочных типов. См. hashCode в scala.Any.

возвращает

значение хэш-кода для данного объекта.

Классы определения
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Проверяет, соответствует ли динамический тип объекта-получателя типу T0.

Обратите внимание, что результат проверки зависит от стирания типов в Scala. Таким образом, выражение 1.isInstanceOf[String] вернёт false, а выражение List(1).isInstanceOf[List[String]] вернёт true. В последнем примере, так как аргумент типа стирается во время компиляции, невозможно проверить, относятся ли элементы списка к указанному типу.

возвращает

true , если объект-получатель является экземпляром стёртого типа T0; false в противном случае.

Классы определения
Any

def lift: (A) ⇒ Option[B]

Преобразует эту частичную функцию в обычную функцию, возвращающую Option результат.

возвращает

функцию, которая принимает аргумент x, возвращающую Some(this(x)) , если this определена для x, и None в противном случае.

См. также

Function.unlift

final def ne(arg0: AnyRef): Boolean

Эквивалентно !(this eq that).

возвращает

true если аргумент не является ссылкой на объект-получатель; false в противном случае.

Классы определения
AnyRef

final def notify(): Unit

Разбуживает один поток, ожидающий монитора объекта-получателя.

Классы определения
AnyRef
Аннотации
@native()
Примечание

не указан SLS как член AnyRef

final def notifyAll(): Unit

Разбуживает все потоки, ожидающие монитора объекта-получателя.

Классы определения
AnyRef
Аннотации
@native()
Примечание

не указан SLS как член AnyRef

def orElse[A1 <: A, B1 >: B](that: PartialFunction[A1, B1]): PartialFunction[A1, B1]

Комбинирует эту частичную функцию с резервной частичной функцией, которая применяется там, где текущая частичная функция не определена.

A1

тип аргумента резервной функции

B1

тип результата резервной функции

that

резервная функция

возвращает

частичная функция, область определения которой является объединением областей определения этой частичной функции и that. Результирующая частичная функция принимает x к this(x), где this определена, и к that(x) в противном случае.

def runWith[U](action: (B) ⇒ U): (A) ⇒ Boolean

Составляет эту частичную функцию с функцией действия, которая применяется к результатам этой частичной функции. Функция действия вызывается только для побочных эффектов; её результат игнорируется.

Обратите внимание, что выражение pf.runWith(action)(x) эквивалентно

if(pf isDefinedAt x) { action(pf(x)); true } else false

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

action

функция действия

возвращает

функцию, которая отображает аргументы x в isDefinedAt(x). Результирующая функция выполняет action(this(x)), где this определено.

Since

2.10

См. также

applyOrElse.

final def synchronized[T0](arg0: ⇒ T0): T0

Определяющие классы
AnyRef

def toString(): String

Создаёт строковое представление этого объекта. Представление по умолчанию зависит от платформы. На платформе Java это конкатенация имени класса, "@" и хэш-кода объекта в шестнадцатеричном формате.

возвращает

строковое представление объекта.

Определяющие классы
Function1 → AnyRef → Any

final def wait(): Unit

Определяющие классы
AnyRef
Аннотации
@throws( ... )

final def wait(arg0: Long, arg1: Int): Unit

Определяющие классы
AnyRef
Аннотации
@throws( ... )

final def wait(arg0: Long): Unit

Определяющие классы
AnyRef
Аннотации
@throws( ... ) @native()

def →[B](y: B): (PartialFunction[A, B], B)

Неявный
Этот член добавлен неявным преобразованием из PartialFunction[A, B] в ArrowAssoc[PartialFunction[A, B]] с помощью метода ArrowAssoc в scala.Predef.
Определяющие классы
ArrowAssoc

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

Spec-Zone.ru

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