私は封印された特性を持っています:
sealed trait ActorMessage
case class AddX(x: Int) extends ActorMessage
case class RemoveX(x: Int) extends ActorMessage
また、すべてのメッセージを処理し、完全でない一致について警告する機能もあります。
def handleMessage: ActorMessage => Unit = {
case AddX(x) => ...
case RemoveX(x) => ...
}
アクターには PartialFunction[Any, Unit] が必要です。PartialFunction は Function を拡張します。つまり、自分の Function を PartialFunction に割り当てることはできません。
私は簡単なコンバーターを書きました:
def liftToPartialFunction[FUND <: PFUND, B, PFUND](f: Function[FUND, B]): PartialFunction[PFUND, B] = new PartialFunction[PFUND, B] {
override def isDefinedAt(x: PFUND): Boolean = x.isInstanceOf[FUND]
override def apply(v1: PFUND): B = f(v1.asInstanceOf[FUND])
}
しかし、これを行うためのより良い方法はありますか? または、標準のscalaライブラリに同等のものはありますか?