【问题标题】:Scala/Akka Future onComplete Success compiler errorScala/Akka Future onComplete Success 编译器错误
【发布时间】:2014-05-22 22:49:39
【问题描述】:

我有一个等待未来结果的演员。调用未来的 onComplete 会导致编译器错误:

错误:无法将构造函数实例化为预期类型 [scalac] 发现:akka.actor.Status.Success [scalac] 必需: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
        }
      }

不确定如何为此提供正确的参数类型。

【问题讨论】:

  • 尝试添加Failure 吗?也许该类型是在Success[List[PP]] => Unit 而不是Try[List[PP]] => Unit 创建的。
  • 您也可以使用pipeTo 模式,如doc.akka.io/docs/akka/snapshot/scala/… 所述

标签: scala akka actor future


【解决方案1】:
[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) => ...
}

【讨论】:

  • 进口与您所说的完全一样。我删除了它们,导入了正确的,它起作用了。谢谢。
猜你喜欢
  • 2016-12-04
  • 2018-04-17
  • 2017-08-01
  • 2021-05-30
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
相关资源
最近更新 更多