有没有可能实现这样的事情:
for {
numberOfLines <- Future { getNumberOfLines() }
i <- 0 to numberOfLines
result <- Future { extractResultFromLine(i) }
} yield result
我希望清楚我的意图是什么。
您可以使用Future.traverse
// Gives you a Future[IndexedSeq[`whatever extractResult returns`]]
for {
numberOfLines <- Future{getNumberOfLines()}
result <- Future.traverse(0 to numberOfLines)(i => Future(extractResultFromLine(i)))
} yield result
任务是实现递归方法,返回 Future 并且由于这一部分("在其他递归(结果::: res,尝试1)")代码失败与错误,因为它期望未来[Seq[结果]],但实际上返回未来[对象]。 据我所知,问题在于yield块内的表达式必须返回Seq[Result],以便将来由Monad进行后续包装。但是“递归(结果::res,尝试1)”将返回未来。因此,不是预期的Seq[Result]收益率,而是包含未来的[
我有两个函数返回期货。我正试图使用for-yield理解将第一个函数的修改结果输入到另一个函数中。 此方法有效: 然而,我对“如果”在那里不满意,似乎我应该能够使用地图。 但是当我尝试使用地图时: 我得到一个编译错误: 我尝试了一些变化,但没有发现任何有吸引力的工作。有人能提出更好的理解和/或解释我的第二个例子的错误吗? 下面是一个最小但完整的Scala 2.10可运行示例:
Scala使用什么模式来处理这种情况: 你有很多未来(它们可以是任何东西,但为了举例…) 你有一个返回未来的函数 我想做这样的事情: 我想返回一个值,但是我在rent语句中调用foF,我会得到一个
我正在阅读Scala Cookbook(http://shop.oreilly.com/product/0636920026914.do) 有一个与未来使用相关的例子,涉及理解。 到目前为止,我对理解的理解是,当与一个集合一起使用时,它会产生另一个相同类型的集合。例如,如果每个< code>futureX的类型为< code>Future[Int],则以下内容也应为< code>Future[In
我有一个表示DB记录的字符串id列表。我想从数据库异步加载它们,然后异步地将每个记录上传到远程服务器,然后当所有的上传都完成时,记录已上传记录的id。 因为我使用的是Scala 2.9.2,所以我使用的是Twitter的core-util Future实现,但是在单子转换方面,它应该和2.10 futures完全一样。 总的概念是这样的: 为了便于理解,我尝试通过一个来实现,但是fetch返回一个
我非常熟悉< code>for comprehension和< code>flatMap on Options。 所以我知道你可以这样做 如果理解中没有任何内容是 ,则给了我 因为它正在对每个语句执行 。 但实际上我在寻找相反的东西。我想遍历到< code>for理解,只要一切都是< code>None,就像< code>for理解中的< code>orElse一样。 例如: 有没有类似的东西,或