次のスニペットの場合、IDEAは警告を出しますが、これfuture {None}
は冗長です。
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
それを行うためのより良い可能性はありますか?
次のスニペットの場合、IDEAは警告を出しますが、これfuture {None}
は冗長です。
queryString match {
case Some(query) => ... // Do async call
case None => future { None }
}
それを行うためのより良い可能性はありますか?
Future.successful[T](result: T)
を使用して、クロージャを生成せずに、すでに設定されている未来を作成できますFuture.successful(None)
。
ただし、futureは、型パラメーターに関係なく成功と失敗をすでに区別しているためFuture.failed(new Exception("No query string"))
、非同期呼び出しでの折り返しを省略できる場合は、を介して失敗を通知することもできますSome
。
この場合、IDEAの警告が役立つかどうかはわかりません。
マッチングを将来に押し下げることで、潜在的にそれを沈黙させることができます:
future {
queryString match {
case Some(query) => Some(computeResult(query))
case None => None
}
}
(またはもっと簡単にfuture { queryString.map(computeResult(_)) }
:)
私は自分で解決したと思います。Future自体も失敗する可能性があり、失敗はNoneに等しいため、Futureにカプセル化されたオプションは必要ありません。
今、私は未来を返すだけで、:
queryString match {
case Some(query) =>
//async Call which returns a Future without Option
case None => throw new Exception("Error")
}