【发布时间】:2015-07-15 09:00:59
【问题描述】:
我有一个封闭的特质:
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) => ...
}
Actor 需要 PartialFunction[Any, Unit]。 PartialFunction extends 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 库中是否有任何等价物?
【问题讨论】:
标签: scala akka case actor partialfunction