在scala中扩展部分实现的部分函数



我在这里使用Akka演员库。actor库定义了一个局部函数"receive",扩展了"actor"的actor必须实现它来处理各种消息。我正在为我的应用程序创建一个trait层次结构,其中trait"clockActor"扩展Actor和"MasterClock"one_answers"SubClock"扩展"clockActor"。我希望将时钟的常见功能添加到"时钟"特征的接收功能中,但是我如何在主时钟和子时钟特征中为接收功能添加额外的功能?

简而言之,我需要一种向局部函数添加额外的case语句的方法。想法吗?

如前所述,您可以轻松地使用orElse组成PartialFunctions

trait ClockActor {
    def commonOp = {
        case ... => ...
    }
}
class MasterClock extends Actor with ClockActor {
    def receive = commonOp orElse masterOp
    def masterOp = {
        case ... =>  ...
    }
}
class SubClock extends Actor with ClockActor {
    def receive = commonOp orElse subOp
    def subOp = {
        case ... =>  ...
    }
}

我想到的一件事是这样做:

trait ClockActor {
  def pf:PartialFunction[String, Boolean] = {
    case "a" => true
    case v if(_pf.isDefinedAt(v)) => _pf.apply(v)
  }
  def _pf:PartialFunction[String, Boolean] = Map.empty
}
object MasterClock extends ClockActor {
  override def _pf:PartialFunction[String, Boolean] = {
    case "b" => false
  }
  println(pf("a"))
  println(pf("b"))
}

将输出:

scala> MasterClock
true
false

true来自特性ClockActor的部分函数中的定义,false来自对象MasterClock

相关内容

  • 没有找到相关文章

最新更新