2014-04-09 4 views
4

나는 미래의 결과를 기다리는 배우가 있습니다. 미래의 onComplete를 호출하면 컴파일러 오류가 발생합니다Scala/Akka Future 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 
     } 
     } 

이에 대한 매개 변수의 오른쪽 종류를 제공하는 방법을 확실하지. 정말 당신이 scala.util.Success을 의미 할 때 컴파일러가 Success를보고 그것이 akka.actor.Status.Success라고 생각 의미

+0

'실패'도 추가해보세요. 아마도'[List [PP]] => Unit' 대신에'Success [List [PP]] => Unit'에서 타입이 만들어지고있을 것입니다. – wheaties

+0

http://doc.akka.io/docs/akka/snapshot/scala/actors.html#Ask__Send-And-Receive-Future –

답변

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

. akka Success 클래스를 가져 오는 어딘가의 어딘가가있을 것입니다.

akka.actor.Status.Success에 대한 가져 오기를 제거하거나 클래스의 정규화 또는 가져 오기 별칭 (예 : .xml)을 사용하여 모호성을 해결하십시오.

import scala.util.{Success => ScalaSuccess} 

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

에 설명 된대로 'pipeTo'패턴을 사용할 수도 있습니다. 수입 한 것은 명시한대로였습니다. 나는 그들을 제거하고, 올바른 것을 가져 왔고, 효과가있었습니다. 고맙습니다. – binarygiant