4

次のスニペットの場合、IDEAは警告を出しますが、これfuture {None}は冗長です。

queryString match {
  case Some(query) => ... // Do async call
  case None        => future { None }
}

それを行うためのより良い可能性はありますか?

4

3 に答える 3

5

Future.successful[T](result: T)を使用して、クロージャを生成せずに、すでに設定されている未来を作成できますFuture.successful(None)

ただし、futureは、型パラメーターに関係なく成功と失敗をすでに区別しているためFuture.failed(new Exception("No query string"))、非同期呼び出しでの折り返しを省略できる場合は、を介して失敗を通知することもできますSome

于 2013-02-16T17:26:04.917 に答える
1

この場合、IDEAの警告が役立つかどうかはわかりません。

マッチングを将来に押し下げることで、潜在的にそれを沈黙させることができます:

future {
    queryString match {
        case Some(query) => Some(computeResult(query))
        case None => None
    }
}

(またはもっと簡単にfuture { queryString.map(computeResult(_)) }:)

于 2013-02-16T17:20:37.253 に答える
1

私は自分で解決したと思います。Future自体も失敗する可能性があり、失敗はNoneに等しいため、Futureにカプセル化されたオプションは必要ありません。

今、私は未来を返すだけで、:

queryString match {

  case Some(query) =>
    //async Call which returns a Future without Option
  case None => throw new Exception("Error")
}
于 2013-02-16T17:25:11.163 に答える