Scala:未来、压缩和恢复

Scala:未来、压缩和恢复,scala,future,Scala,Future,以下代码按预期编译和工作 def find1(selector: JsValue): Future[Seq[String]] def find2(selector: JsValue): Future[Seq[String]] find1(Json.obj("name" -> "Joe")) zip find2(Json.obj("name" -> "Tim")) map { case (result1, result2) => val result = result1 +

以下代码按预期编译和工作

def find1(selector: JsValue): Future[Seq[String]]
def find2(selector: JsValue): Future[Seq[String]]

find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1, result2) =>
  val result = result1 ++ result2
  ...
}
。。。但是如果我添加
recover
来处理像这样的可能错误

find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1, result2) =>
  val result = result1 ++ result2
  ...
}.recover { case e =>
  ...
}
find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1: Seq[String], result2: Seq[String]) =>
  val result = result1 ++ result2
  ...
}.recover { case e =>
  ...
}
。。。我总是遇到以下错误:

[error] /home/j3d/test/TestController.scala:558: missing parameter type for expanded function
[error] The argument types of an anonymous function must be fully known. (SLS 8.5)
[error] Expected type was: ?
[error]        find2(Json.obj("name" -> "Tim")) map { case (result1, result2) =>
[error]                                             ^
[error] one error found
我试着像这样指定
result1
result2
的类型

find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1, result2) =>
  val result = result1 ++ result2
  ...
}.recover { case e =>
  ...
}
find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1: Seq[String], result2: Seq[String]) =>
  val result = result1 ++ result2
  ...
}.recover { case e =>
  ...
}

。。。但是没有任何变化,即它只编译而没有
recover
。我遗漏了什么吗?

始终使用运算符符号

find1(Json.obj("name" -> "Joe")) zip
find2(Json.obj("name" -> "Tim")) map { case (result1, result2) =>
   val result = result1 ++ result2
   ...
} recover { case e => // removed the '.' 
  ...
}

当然,我们可以想出一个比“无点”更好的词来表示“调用没有点的方法”?这与无点样式无关。