我在这里使用 Akka 演员库。演员库定义了一个部分函数“接收”,扩展“演员”的演员必须实现它来处理各种消息。我正在为我的应用程序创建一个特征层次结构,其中特征“clockActor”扩展了 Actor,“MasterClock”和“SubClock”扩展了“clockActor”。我希望将时钟的通用功能添加到“时钟”特征的接收功能中,但是如何在主时钟和子时钟特征的接收功能中添加额外的功能?
简而言之,我需要一种将额外的 case 语句添加到偏函数的方法。想法?
我在这里使用 Akka 演员库。演员库定义了一个部分函数“接收”,扩展“演员”的演员必须实现它来处理各种消息。我正在为我的应用程序创建一个特征层次结构,其中特征“clockActor”扩展了 Actor,“MasterClock”和“SubClock”扩展了“clockActor”。我希望将时钟的通用功能添加到“时钟”特征的接收功能中,但是如何在主时钟和子时钟特征的接收功能中添加额外的功能?
简而言之,我需要一种将额外的 case 语句添加到偏函数的方法。想法?
正如已经建议的那样,您可以轻松地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 ... => ...
}
}
想到的一件事是做这样的事情:
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 的偏函数中的定义ClockActor
,false
来自于 Object MasterClock
。