2014-04-09 97 views
4

我有一個等待未來結果的演員。調用的onComplete未來導致編譯器錯誤:斯卡拉/阿卡未來onComplete成功編譯器錯誤

error: constructor cannot be instantiated to expected type [scalac] found : akka.actor.Status.Success [scalac] required: scala.util.Try[Iterable[Any]] [scalac] case Success(result: List[PCBInstanceStats]) => { [scalac] ^

演員將會得到:

case "pcbStatus" => { 
     val future = Future.traverse(context.children)(x => { 
     (x ? "reportStatus")(5 seconds) 
     }) 

     future.onComplete { 
     case Success(result: List[PCBInstanceStats]) => { 
      self ! result 
     } 
     } 

不知道如何爲此提供正確類型的參數。

+0

嘗試添加'失敗'以及?也許類型是在'Success [List [PP]] => Unit'而不是'Try [List [PP]] => Unit'創建的。 – wheaties

+0

您也可以使用'pipeTo'模式,如http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Ask__Send-And-Receive-Future –

回答

11
[scalac] found : akka.actor.Status.Success 

也就是說,編譯器看到你的Success,並認爲這是一個akka.actor.Status.Success,當你真正的意思是一個scala.util.Success。您可能在某處導入akka Success類。

要麼刪除導入akka.actor.Status.Success,要麼通過完全限定該類或使用導入別名(例如,

import scala.util.{Success => ScalaSuccess} 

future.onComplete { 
    case ScalaSuccess(result) => ... 
    // or 
    case scala.util.Success(result) => ... 
} 
+0

所述。導入與您所述的完全相同。我刪除了它們,導入了正確的一個,它工作。謝謝。 – binarygiant