组成

部分函数通常用于定义部分的总函数:

sealed trait SuperType
case object A extends SuperType
case object B extends SuperType
case object C extends SuperType

val pfA: PartialFunction[SuperType, Int] = {
  case A => 5
}

val pfB: PartialFunction[SuperType, Int] = {
  case B => 10
}

val input: Seq[SuperType] = Seq(A, B, C)

input.map(pfA orElse pfB orElse {
  case _ => 15
}) // Seq(5, 10, 15)

在此用法中,按照与 orElse 方法的连接顺序尝试部分函数。通常,提供匹配所有剩余案例的最终部分函数。总的来说,这些功能的组合起到全部功能的作用。

此模式通常用于分离关注点,其中函数可以有效地作为不同代码路径的调度程序。这是常见的,例如,在 Akka Actor接收方法中