1

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
}

私がやりたいことは、最後のケースを特性に移すことができるように、その部分関数を分割することさえ可能かどうかはわかりません。

したがって、新しいコメット俳優がいるときは、次のようにします。

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

そしてどういうわけか、特性MyActorTraitには欠落があります

case AlwaysPresentCaseClass => default action
4

2 に答える 2

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")
于 2011-07-27T02:19:26.190 に答える
0

これを試して:

trait MyActorTrait extends /* whatever class provides lowPriority */ {
   def default: PartialFunction[Any, Unit] = {
           case AlwaysPresentCaseClass => default action
   }

   abstract override def lowPriority: PartialFunction[Any,Unit] =
       super.lowPriority orElse default
}

唯一の問題は、あなたができないということですMyNewComet extends MyActorTraitclass MyNewCometDefault extends MyNewComet with MyActorTrait代わりに、、またはのいずれかを使用できますnew MyNewComet with MyActorTrait

于 2011-07-27T17:49:24.070 に答える