局部函数通常用于定义部分的整体函数:
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 }) // 序列(5、10、15)
在这种用法中,按与该orElse方法串联的顺序尝试部分功能。通常,提供与所有其余情况匹配的最终部分功能。这些功能的组合共同充当一个整体功能。
此模式通常用于分离关注点,其中函数可以有效地充当分派的代码路径的调度程序。例如,这在Akka Actor的接收方法中很常见。