2016-05-28 27 views
2

我目前正在學習玩阿卡和斯卡拉。Akka 2.4.6 - 問(或?)方法在哪裏?

Akka文檔說,您可以使用?ask方法從演員得到一條消息。然而,在我正在使用的Akka版本(2.4.6)中的ActorRef類中沒有?ask

它移動到某個地方還是棄用了?

+2

它基於implicits,所以你需要將其導入到使用它(與pipeTo模式):'import akka.pattern.ask' – alextsc

回答

3

它移動到某個地方還是棄用了?

?被定義爲AskSupport性狀內部的implicit def,是一個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隱式作品,隱式類接受這種類型的一個參數。這意味着?方法適用於任何ActorRef通過implicit conversion

由於@Sergey注意到的意見,以使範圍內隱,你需要import akka.pattern.ask

+1

可能值得添加的是,爲了啓用隱式轉換,應該引入akka.pattern.ask :) – Sergey

+1

@Sergey完成:) –

+0

Ask.scala的鏈接是破碎。是[this](https://github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/pattern/AskSupport.scala#L280)你想鏈接到哪裏? –