私は、コードを同期型から非同期型に移行しています。問題はかなりシンプルです。一連の関数を呼び出し、最初の関数で停止してエラーのない結果を返します(その値を返す、そうでなければ最後に計算した値)。別のスカラ先物構成パズル
しかし、関数が非同期(Future [Int]を返す)になると、私は正しい呼び出しを得ることができません。例えば、
def ffind(ffs: Seq[Function0[Future[Int]]], result: Future[Int] = Future { -1 }): Future[Int] = {
if (ffs.isEmpty) result
else ffind(ffs.tail, ffs.head())
}
は素晴らしい作品が、それは関係なく、戻り値の、すべての機能を評価します。しかし、何かのように:
def findBad(ffs: Seq[Function0[Future[Int]]], result: Future[Int] = Future { -1 }): Future[Int] = {
if (ffs.isEmpty) result
else {
ffs.head() map { res =>
if (res != 0) res
else findBad(ffs.tail, Future(res))
}
}
}
はチェックしません。助言がありますか?関数の各呼び出しが高価であると仮定することができます。そのため、シーケンス内の最初の「成功」呼び出しの後でも、何も2回呼び出されることはありません。 Future[Int]
を返しfindBad
が、マッピングres
findBad
の呼び出しにFuture[Future[Int]]
につながる:それは型チェックをしない理由TIA
こんにちは、これは解決されましたか? – slouc
はい、申し訳ありませんが、質問を更新することができませんでした。単に答えをアップアップしました。とても有難い! –
私は強迫しているので、私はちょうどクリーンアップしています。私の答えがあなたの問題を解決したかどうか、それを受け入れられたとマークするか、それとも不十分であるか、私はそれを削除します。 – slouc