部分函数模式匹配分为类和特征

fmp*_*ard 1 scala partialfunction

Lift在Comet Actors的实现上使用了PartialFunction,你通常会在你的类上得到它:

override def lowPriority: PartialFunction[Any,Unit] = {
  case MyCaseClass1(a)        => do something here
  case MyCaseClass2(a)        => do something here
  case AlwaysPresentCaseClass => default action
}
Run Code Online (Sandbox Code Playgroud)

我想做什么,我不确定是否可能分割该部分功能,以便最后一个案例可以移动到特征中.

所以,当我有一个新的彗星演员时,我只是这样做:

class MyNewComet extends MyActorTrait {
  override def lowPriority: PartialFunction[Any,Unit] = {
    case MyCaseClass1(a)        => do something here
    case MyCaseClass2(a)        => do something here
  }
}
Run Code Online (Sandbox Code Playgroud)

不知何故,特质MyActorTrait将失踪

case AlwaysPresentCaseClass => default action
Run Code Online (Sandbox Code Playgroud)

0__*_*0__ 9

您可以使用以下orElse方法组成部分函数:

val f1: PartialFunction[Any, String] = {
  case 22 => "hallo"
}
val f2: PartialFunction[Any, String] = {
  case "rara" => "welt"
}

val f = f1 orElse f2 // f falls back to f2 if undefined in f1
f(22)
f("rara")
Run Code Online (Sandbox Code Playgroud)