Scala/Akka-通过行为堆栈传递消息?
如果我通过Scala/Akka-通过行为堆栈传递消息?,scala,akka,Scala,Akka,如果我通过context-been(foo,discardoold=false)将行为堆叠起来,有没有办法将消息延迟到行为堆栈的更底层 假设我有堆叠的上下文foo和bar。两者都有一些处理Baz消息的方法(除其他外)-如果foo位于行为堆栈的顶部,是否有方法将Baz消息传递到条 我假设case防护将阻止一个级别使用消息,但在传递消息之前,foo级别的副作用仍然会变得更加复杂——防护必须是执行副作用的某个功能 编辑以下内容: 我将堆叠上下文用作类层次结构的(某种)替代方案。在较低级别的上下文中,所
context-been(foo,discardoold=false)
将行为堆叠起来,有没有办法将消息延迟到行为堆栈的更底层
假设我有堆叠的上下文foo
和bar
。两者都有一些处理Baz
消息的方法(除其他外)-如果foo
位于行为堆栈的顶部,是否有方法将Baz
消息传递到条
我假设case
防护将阻止一个级别使用消息,但在传递消息之前,foo
级别的副作用仍然会变得更加复杂——防护必须是执行副作用的某个功能
编辑以下内容:
我将堆叠上下文用作类层次结构的(某种)替代方案。在较低级别的上下文中,所有这些参与者都共享一些基本行为,然后在区分参与者的层之后添加其他行为。这是一种“有点”的替代方案,因为参与者可能实际上需要更改“类”以响应消息(同时保留自己,以便其他具有这些句柄的参与者不需要替换一堆引用等)。我希望能够做的是类似于有条件地调用super.apply(Baz),同时在正确的概念层/位置保留副作用。您可以使用隐藏特性()并隐藏特定类型的所有消息。然后,您可以取消存储所有隐藏的消息,并在取消与本不打算处理它们的行为相适应后,使用“新”(堆栈中较低的)接收行为处理它们。这听起来并不完全是你想要的,但可能很有用 针对您的编辑: 如果您想要一个基本参与者,然后让参与者稍微修改基本参与者的接收方法,那么您可以使用抽象重写。这完全不同于堆叠接收,但应实现您所寻找的目标:
class Base extends Actor {
def receive {
case Baz => println("BASIC BEHAVIOR")
case _ => println("other messages")
}
}
trait BaseWithOtherWayToHandleBaz extends Base {
def otherRecieve: Recieve = {
case Baz => println("OVERRIDE BEHAVIOR")
}
abstract override def receive = otherRecieve orElse super.receieve
}
Receive
是一个PartialFunction
功能,您可以使用orElse
或然后
组合它们。可能是人力资源管理。但是,我绝对希望保留堆栈的顶部,而不是取消它的定位。您现在的堆栈行为有什么用?你有过不合身的经历吗?嗯,轻微的修改:演员偶尔会不合身,但不会在传递信息的上下文中。Q也更新了。重新编辑:这似乎并没有实现在不同特征之间变形的持久演员。它也不能有条件地将Baz
从otherReceive传递到super.receive。不确定如何帮助您。。。您可能正在寻找这种设计模式:我不认为,而且在接收
上会有用-它产生单位
orElse
没有涵盖“在这个区块和这个区块中进行评估”的情况。