6

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

简而言之,我需要一种将额外的 case 语句添加到偏函数的方法。想法?

4

2 回答 2

14

正如已经建议的那样,您可以轻松地PartialFunctions使用orElse

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 ... =>  ...
    }

}
于 2013-01-09T15:47:51.310 回答
1

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

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来自于 Trait 的偏函数中的定义ClockActorfalse来自于 Object MasterClock

于 2013-01-09T14:38:48.653 回答