Трейт scala.PartialFunction
Компаньон объект PartialFunction
трейт PartialFunction[-A, +B] extends (A) ⇒ B
Абстрактные значения членов
абстрактный 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
копия объекта-получателя.
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[_]
Возвращает представление класса во время выполнения для объекта.
- возвращает
объект класса, соответствующий типу получателя во время выполнения.
def hashCode(): Int
Метод hashCode для ссылочных типов. См. hashCode в scala.Any.
- возвращает
значение хэш-кода для данного объекта.
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 это конкатенация имени класса, "@" и хэш-кода объекта в шестнадцатеричном формате.
- возвращает
строковое представление объекта.
final def wait(): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws( ... )
final def wait(arg0: Long, arg1: Int): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws( ... )
final def wait(arg0: Long): Unit
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
Частичная функция типа
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