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 '.'
...
}
当然,我们可以想出一个比“无点”更好的词来表示“调用没有点的方法”?这与无点样式无关。