我在这里使用Akka actor库。 actors库定义了一个部分函数“receive”,扩展“actor”的actor必须实现处理各种消息。我正在为我的应用程序创建一个特征层次结构,其中trait“clockActor”扩展了Actor,“MasterClock”和“SubClock”扩展了“clockActor”。我想在“时钟”特性的接收功能中添加时钟的通用功能,但是如何在主时钟和副时钟特性中为接收功能添加额外的功能?
简而言之,我需要一种方法来向部分函数添加额外的case语句。 想法?
答案 0 :(得分: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 ... => ...
}
}
答案 1 :(得分: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
来自特征ClockActor
的部分函数中的定义,false
来自对象MasterClock
。