私はakka俳優と仕事をしています。すべてのアクターreceive
は、のシグネチャを持つメソッドを実装する必要がありPartialFunction[Any, Unit]
ます。のような署名とのマッチングに使用する、より厳密な関数を定義したいと思いますPartialFunction[Action, Unit]
。ただし、これはコンパイルされません。
class PlayerActor extends Actor with {
override def receive: Receive = rec
def rec: PartialFunction[Action, Unit] = {
case Jump() =>
}
}
ケースを忘れた場合にコンパイラが警告するように、これを実行したいと思います。
Receive
と定義されているtype Receive = PartialFunction[Any, Unit]
私はそれを次のように手動で行うことになりました:
override def receive = {
case a: Action => rec(a)
}
キャストすることによっても行うことができます:
override def receive = rec.asInstanceOf[PartialFunction[Any, Unit]]
または暗黙の変換を介して:
implicit def toAnyPartial[T](f: PartialFunction[T, Unit]): PartialFunction[Any, Unit] =
f.asInstanceOf[PartialFunction[Any, Unit]]