Класс AbstractPartialFunction.AbstractPartialFunction
абстрактный класс AbstractPartialFunction[-T1, +R] extends T1 => R с PartialFunction[T1, R]
AbstractPartialFunction переформулирует все операции своего супертрейта PartialFunction в терминах isDefinedAt и applyOrElse.
Это позволяет в многих случаях получить более эффективные реализации: - оптимизированный метод orElse поддерживает цепочки orElse за линейное время и без замедления, если часть orElse не требуется. - оптимизированный метод lift помогает избежать двойной оценки матчингов и условий частичной функции.
Этот трейт используется в качестве основы для реализации всех литералов частичных функций.
| Супертипы | |
|---|---|
| Тип "self" |
Конкретные методы
Исходный код
def apply(x: T1): R
Применяет тело этой функции к аргументу.
| Возвращает | результат применения функции. |
|---|
Наследованные методы
Исходный код
Компонует эту частичную функцию с другой частичной функцией, которая применяется к результатам этой частичной функции.
Обратите внимание, что вызов isDefinedAt для результирующей частичной функции может применить первую частичную функцию и выполнить её побочные эффекты. Для повышения эффективности рекомендуется использовать applyOrElse вместо isDefinedAt или apply.
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращает | частичная функция с областью определения этой частичной функции, суженной другой частичной функцией, которая отображает аргументы |
| Наследуется из | PartialFunction |
Исходный код
override def andThen[C](k: R => C): PartialFunction[A, C]
Компонует эту частичную функцию с функцией преобразования, которая применяется к результатам этой частичной функции.
Если тип функции в runtime является PartialFunction, то используется другой метод andThen (обратите внимание на его предостережения).
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращает | частичная функция с областью определения этой частичной функции, возможно, суженной заданной функцией, которая отображает аргументы |
| Классы определения | 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 . Это может привести к лучшей производительности и более предсказуемому поведению относительно побочных эффектов.
| Параметры значения |
|
|---|---|
| Возвращает | результат применения этой функции или функции fallback. |
| Наследуется из | PartialFunction |
Исходный код
Компонует другую частичную функцию k с этой частичной функцией таким образом, что эта частичная функция применяется к результатам k.
Обратите внимание, что вызов isDefinedAt на результирующей частичной функции может применить первую частичную функцию и выполнить её побочные эффекты. Для повышения эффективности рекомендуется использовать applyOrElse вместо isDefinedAt или apply.
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращает | частичная функция с областью определения другой частичной функции, суженной этой частичной функцией, которая отображает аргументы |
| Наследуется из | PartialFunction |
Исходный код
def compose[A](g: A => T1): A => R
Компонует две функции Function1 в новую Function1, где эта функция применяется последней.
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращает | новая функция |
| Наследуется из | 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
Проверяет, содержится ли значение в области определения функции.
| Параметры значения |
|
|---|---|
| Возвращает |
|
| Наследуется из | PartialFunction |
Исходный код
Преобразует эту частичную функцию в обычную функцию, возвращающую результат типа Option.
| Возвращает | функцию, которая принимает аргумент |
|---|---|
| См. также | Function.unlift |
| Унаследовано от | PartialFunction |
Исходный код
Компонует эту частичную функцию со вспомогательной частичной функцией, которая применяется в тех случаях, когда эта частичная функция не определена.
| Параметры типа |
|
|---|---|
| Параметры значения |
|
| Возвращает | частичную функцию, область определения которой является объединением областей определения этой частичной функции и |
| Унаследовано от | PartialFunction |
Исходный код
Компонует эту частичную функцию с функцией действия, которая применяется к результатам этой частичной функции. Функция действия вызывается только для своих побочных эффектов; её результат игнорируется.
Обратите внимание, что выражение pf.runWith(action)(x) эквивалентно
if(pf isDefinedAt x) { action(pf(x)); true } else false
за исключением того, что runWith реализована через applyOrElse и, следовательно, потенциально более эффективна. Использование runWith позволяет избежать двойного вычисления соответствий шаблонов и условий для литералов частичных функций.
| Параметры значения |
|
|---|---|
| Возвращает | функцию, которая отображает аргументы |
| См. также |
|
| Унаследовано от | PartialFunction |
Исходный код
Возвращает строковое представление объекта.
Представление по умолчанию зависит от платформы.
| Возвращает | строковое представление объекта. |
|---|---|
| Классы определений | Function1 -> Any |
| Унаследовано от | Function1 |
Исходный код
Пытается извлечь 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