Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala/Akka-通过行为堆栈传递消息?_Scala_Akka - Fatal编程技术网

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
没有涵盖“在这个区块和这个区块中进行评估”的情况。