首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala for-comprehension (identity map)的优化

Scala for-comprehension (identity map)的优化
EN

Stack Overflow用户
提问于 2013-01-25 22:47:43
回答 1查看 399关注 0票数 1

如何在Scala for-comprehensions中避免map(identity)

例如,考虑以下内容:

代码语言:javascript
复制
import scala.concurrent._
import scala.concurrent.duration._

object Test extends App {
  implicit val executorContext = ExecutionContext.global
  val future = Future.successful { 1 }
  val result = for (
    value <- future;
    b <- Future { value * 2 }
  ) yield b
  println(Await.result(result, 60 seconds))
}

IIUC,for-comprehension翻译成类似于

代码语言:javascript
复制
future.flatMap(value => Future { value * 2 }).map(identity)

我能以某种方式避开尾随的map(identity)吗?或者Scala可以/可以/可以优化它吗?(我想不能,因为还不清楚map是否有副作用,对吧?)

附注:我知道在这个特殊的例子中,事情是可以改进的。我想知道一般的情况,例如Future { value * 2}是对返回未来的函数f的调用f(value)

EN

回答 1

Stack Overflow用户

发布于 2013-01-25 23:15:55

创建自己的未来就是an anti-pattern,只是为了在其中进行应用操作。相反,您可以:

  • future.map(),最后用onSuccess (这是最简单的模型)得到你的结果
  • 如果你坚持理解,yield Future { value * 2 },然后得到你的结果……(虽然这并不能解决虚假的未来创造,然后在你的未来上获得你的结果,然后在problem)
  • transform ...
  • collect

map(f)

根据您的上下文和计算模型,这些解决方案中的一种或另一种可能更合适:您似乎正在呈现一般情况的特定情况,但尚不清楚一般情况是否应该涉及在未来迭代、在one Future中链接转换,或者完全是其他情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14524167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档