Spec-Zone.ru › Scala 3.2

Класс AbstractPartialFunction.AbstractPartialFunction

Исходный код

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

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

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

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

Супертипы
трейт PartialFunction[T1, R]
трейт T1 => R
класс Object
трейт Matchable
класс Any
Тип "self"
AbstractPartialFunction[T1, R]

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

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

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

Возвращает

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

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

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

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

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

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

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

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

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

Возвращает

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

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

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

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

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

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

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

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

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

Возвращает

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

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

Исходный код
def applyOrElse[A1 <: T1, B1 >: R](x: A1, default: A1 => B1): B1

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

Обратите внимание, что выражение 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

функция fallback

x

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

Возвращает

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

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

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

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

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

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

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

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

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

Возвращает

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

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

Исходный код
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[A, B]

Возвращает объект-экстрактор с методом 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: A => Option[B]

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

END_OF_DOCUMENT_MARKER
Возвращает

функцию, которая принимает аргумент 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): 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 определена.

См. также

applyOrElse.

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

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

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

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

Возвращает

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

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

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

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

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

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

Spec-Zone.ru

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