У меня есть запечатанная черта:
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 расширяет функцию, что означает, что я не могу присвоить своей функции 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?