【问题标题】:Value ! is not a member of Actor价值 !不是 Actor 的成员
【发布时间】:2013-12-10 23:18:15
【问题描述】:

我有一个管理 Actor 列表的 Actor 类。当它接收到特定类型的消息时,它会将其传递给它所知道的每个 Actor。

 var loggers : List[Logger]    

def receive = {
  ...
  // log request
  case logmessage : LogMessage => {
      // send message to each logger (if none, nothing happens)
      for (logger <- loggers)
        logger ! logmessage
  }
  ...     
}

我在logger ! logmessage 上遇到编译错误:“值!不是(包).Logger 的成员”。这 !让谷歌很难做到这一点。 Logger 类编译后,有自己的receive 方法,一行包含self ! PoisonPill,意思是!操作员在那里工作。它们在同一个包中。

【问题讨论】:

  • 请显示您的 Logger 类的代码。
  • 它扩展了 Actor 并实现了接收。我打算编辑它并删除身体,但现在就是这样。

标签: scala akka actor


【解决方案1】:

我假设Logger extends Actor

在 Akka 中,消息发送是在 ActorRefs 之间完成的,而不是在 Actors 之间。每个演员的self 是一个ActorRef 实例。因此,您可能希望将 loggers 变量更改为 var loggers: List[ActorRef]

更好的是,您可以使用ActorSelection,它有一个! 方法,可以将消息发送到选择中的所有actor refs。您可以在 Actor 的 context 中找到创建 ActorSelection 的方法。

附:您可以使用 Akka Scaladocs 上的 "#" page 来查找以符号开头的方法。在该页面上,您可以看到在ScalaActorRefScalaActorSelection 上定义了一个!,它们都是ActorRefActorSelection 的隐式升级。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2011-11-05
  • 1970-01-01
相关资源
最近更新 更多