我有一些副作用effectful功能,有沒有連續的Future.find?
def f(): Future[Int] = {
val n = Random.nextInt()
println(s"Generated $n")
Future(n)
}
,我想直到謂詞返回true反覆執行它。
def success(n: Int): Boolean = n % 2 == 0
我的計劃是構建結果
的Stream
val s = Stream.fill(10)(f)
,然後使用Future.find
率先拿到結果是滿足謂詞。
Future.find(s)(success) map println
的問題是,Future.find
運行所有期貨並行,我想它,直到謂詞返回true後,其他順序執行的道路。
scala> Future.find(s)(success) map println
Generated -237492703
Generated -935476293
Generated -1155819556
Generated -375506595
Generated -912504491
Generated -1307379057
Generated -1522265611
Generated 1163971151
Generated -516152076
res8: scala.concurrent.Future[Unit] = [email protected]
Some(-1155819556)
問題是如何順序執行期貨流,直到謂詞返回true?標準或第三方庫中是否有適合的功能?
您可能需要查看'scalaz-stream'或'iteratee' – jilen 2014-10-18 16:39:50
複製std lib的情況。 http://stackoverflow.com/questions/26349318/how-to-invoke-a-method-again-and-again-until-it-returns-a-future-value-contain – 2014-10-18 22:41:37