3
私はJavaからScalaを初めて使いました。そのため、関数型プログラミングのことはまだ分かりません。 Playフレームワークにプロジェクトがあります。 idsを使って行を取得し、それらをhtmlテンプレートで表示するには、データベースを照会する必要があります。ここでScalaの将来のオプションから将来のオブジェクトを取得
は私のコードは
def search(query: String) = Action.async{ request =>
val result = SearchEngine.searchResult(query)
val docs = result.map(DocumentService.getDocumentByID(_).map(doc => doc))
val futures = Future.sequence(docs)
futures.map{documents =>
Ok(views.html.results(documents.flatten))
}
}
getDocumentByID
あるFuture[Options[Document]]
オブジェクトを返しますが、私のresults
テンプレートがArray[Document]
を取るので、私は私が持っているFuture[Options[Document]]
Array[Document]
に、現在のコードが変換するために無駄にしようとしています私が一番近かったのですが、まだコンパイルされません。
Error:(36, -1) Play 2 Compiler:
found : Array[scala.concurrent.Future[Option[models.Document]]]
required: M[scala.concurrent.Future[A]]
私はちょうどそれをしましたが、 'Ok(views.html.results(documents.flatten))'行にエラーがあります。それは言う: 'type mismatch、expected:Array [ドキュメント]、実際:配列[なし]' – Ken
@Kenは 'flatten'を取り除きます – pamu
これを取り除くと、まだエラーがあります:'型不一致、期待値:Array [Document]、actual :mutable.ArrayOps [ドキュメント] ' – Ken