Spec-Zone.ru › Scala 3.1

Класс scala.runtime.AbstractPartialFunction

Исходный код

абстрактный класс AbstractPartialFunction[@specialized -T1, @specialized +R] extends T1 => R with PartialFunction[T1, R]

AbstractPartialFunction переформулирует все операции своего супертрейта PartialFunction в терминах isDefinedAt и applyOrElse.

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

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

Супертипы
трейт PartialFunction[T1, R]
трейт T1 => R
класс Object
трейт Matchable
класс Any
Тип самого себя
AbstractPartialFunction[T1, R]

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

Исходный код
def apply(x: T1): R

Наследованные методы

Исходный код
def andThen[C](k: PartialFunction[R, C]): PartialFunction[T1, C]

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

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

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

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

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

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

Возвращает

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

Наследуется из PartialFunction

Исходный код
override def andThen[C](k: R => C): PartialFunction[T1, C]

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

Если тип функции во время выполнения является PartialFunction, то используется другой метод andThen (обратите внимание на его предостережения).

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

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

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

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

Возвращает

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

Классы определений PartialFunction -> Function1
Наследуется из PartialFunction

Исходный код
def applyOrElse[A1 <: T1, B1 >: R](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 оценки. Это может привести к лучшей производительности и более предсказуемому поведению относительно побочных эффектов.

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

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

x

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

Возвращает

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

Наследуется из PartialFunction

Исходный код
def compose[R](k: PartialFunction[R, T1]): PartialFunction[R, R]

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

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

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

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

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

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

Возвращает

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

Наследуется из PartialFunction

Исходный код@unspecialized
def compose[A](g: A => T1): A => R

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

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

тип, к которому может быть применена функция g

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

функция A => T1

Возвращает

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

Наследуется из Function1

Исходный код
def elementWise: ElementWiseExtractor[T1, R]

Возвращает объект-экстрактор с методом unapplySeq, который извлекает каждый элемент данных последовательности.

Пример
val firstChar: String => Option[Char] = _.headOption
Seq("foo", "bar", "baz") match {
  case firstChar.unlift.elementWise(c0, c1, c2) =>
    println(s"$c0, $c1, $c2") // Output: f, b, b
}
Наследуется из PartialFunction

Исходный код
def isDefinedAt(x: T1): Boolean

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

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

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

Возвращает

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

Наследуется из PartialFunction

Исходный код
def lift: T1 => Option[R]

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

Возвращает

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

См. также

Function.unlift

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

Исходный код
def orElse[A1 <: T1, B1 >: R](that: PartialFunction[A1, B1]): PartialFunction[A1, B1]

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

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

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

B1

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

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

вспомогательная функция

Возвращает

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

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

Исходный код
def runWith[U](action: R => U): T1 => 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 определена.

См. также

applyOrElse.

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

Исходный код
override def toString(): String

Классы определений Function1 -> Any
Унаследовано от Function1

Исходный код
def unapply(a: T1): Option[R]

Попытка извлечь B из A в выражении сопоставления с образцом.

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

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

Spec-Zone.ru

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