我正在尝试创建一个使用actor的基类,有点像这样:
import scala.actors.Actor
case class FooBar()
class ParentActor extends Actor {
def act {
loop {
react {
case f: FooBar =>
println("Parent Foo")
case _ =>
println("Parent something")
}
}
}
}
然后我希望子课看起来像这样:
class ChildActor extends ParentActor {
override def act {
loop {
react {
case i: Integer =>
println("Child int")
case default =>
println("Child Base")
super ! default
}
}
}
}
我的最终目标是在父actor类中提供一个基本功能,如果子actor没有对该case类做出反应,将执行该功能。我试着做了
super ! Message
但这会引发错误:
''预期但找到了标识符。
如何将ChildActor中的消息传递给基本ParentActor act函数?
答案 0 :(得分:1)
处理收到的消息的代码是PartialFunction,它被传递给react
方法 - 换句话说就是那个case / block。不可能直接调用在其他方法(包括超类'方法)中声明的任何闭包,除非该方法以某种方式向您传递对闭包实例的引用。并且应该避免通过继承进行代码重用。
由于案例块是PartialFunction,因此可以使用orElse
方法组合多个此类块。这样,您可以组合多个案例块,以便在没有匹配的情况下它将回退到下一个案例块。
您不需要继承来组合处理程序 - 只需将“父处理程序”作为函数公开,并在调用react
之前组合它们。或者为了减少样板并使ChildActor不知道父代码中的代码,覆盖ParentActor中的react
方法并在将处理程序组合到super.react
之前对其进行编写。