【问题标题】:Akka 2.4.6 - where is ask (or ?) method?Akka 2.4.6 - 询问(或?)方法在哪里?
【发布时间】:2016-05-28 16:30:00
【问题描述】:

我目前正在学习使用 Akka 和 Scala 进行游戏。

Akka 文档说您可以使用?ask 方法从actor 那里获取消息。但是,在我使用的 Akka 版本(2.4.6)中,ActorRef 类中没有 ?ask

它是移动到某个地方还是被弃用了?

【问题讨论】:

  • 是基于implicits的,所以需要导入才能使用(和pipeTo模式一样):import akka.pattern.ask

标签: scala playframework akka


【解决方案1】:

它是移动到某个地方还是被弃用了?

没有。 ? 被定义为 implicit def 内的 AskSupport 特征,并且是 ActorRef 类型的隐式转换:

object AskPattern {
  implicit class Askable[T](val ref: ActorRef[T]) extends AnyVal {
    def ?[U](f: ActorRef[U] ⇒ T)(implicit timeout: Timeout): Future[U] = ask(ref, timeout, f)
}

如您所见,隐式适用于任何ActorRef,因为隐式类接受所述类型的一个参数。这意味着? 方法可通过implicit conversion 应用于任何ActorRef

正如@Sergey 在 cmets 中指出的那样,为了引入隐含范围,您需要 import akka.pattern.ask

【讨论】:

  • 可能值得补充的是,为了启用隐式转换,应该import akka.pattern.ask :)
  • Ask.scala 的链接已损坏。 this 你想链接到哪里?
  • @Matthias 代码在我回答后发生了变化。我会确保更新它。
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多