Scala Futures 如何与 flatMap 链接在一起?

2024-03-20

我正在 Scala 中首次使用 Futures,并且正在研究使用 flatMap 组合器的示例;我一直在关注这个讨论:

http://docs.scala-lang.org/overviews/core/futures.html http://docs.scala-lang.org/overviews/core/futures.html

具体来说,这个例子:

val usdQuote = future { connection.getCurrentValue(USD) }
val chfQuote = future { connection.getCurrentValue(CHF) }
val purchase = for {
    usd <- usdQuote
    chf <- chfQuote
      if isProfitable(usd, chf)
} yield connection.buy(amount, chf)

purchase onSuccess {
    case _ => println("Purchased " + amount + " CHF")
}

翻译成这样:

val purchase = usdQuote flatMap {
    usd =>
         chfQuote
        .withFilter(chf => isProfitable(usd, chf))
        .map(chf => connection.buy(amount, chf))
}

我有点难以理解的是 flatMap 是如何以及何时执行的?

我知道 usdQuote 和 chfQuote 是由“某个线程”在“某个时间”执行的,并且它们注册的回调函数被调用,问题是:

a) usdQuote 和 chfQuote 是否同时执行? (我很确定他们是)。

b) flatMap如何将Future useQuote的值赋给usd?例如,当操作 usdQuote 完成时它会被调用吗?

c) 哪个线程正在执行“flatMap”和“map”操作(可能更多是上一个问题的后续)。

Cheers.


  • a) 当您创建它们时,您已经开始在范围内针对隐式 ExecutionContext 执行它们,因此它们可能会同时运行,因为这取决于它们的执行方式。

  • b) 它并没有真正分配值,但实现使用 onComplete 方法来导致您传递的函数在达到结果后被触发。目前,这应该链接到我所指的 flatMap 方法:https://github.com/scala/scala/blob/v2.11.2/src/library/scala/concurrent/Future.scala#L246 https://github.com/scala/scala/blob/v2.11.2/src/library/scala/concurrent/Future.scala#L246

  • c) 这些是通过前面提到的 ExecutionContext 运行的,还要考虑一下,如果这些 Future 实例可以在不同的 ExecutionContext 上运行,那么 for 理解的部分可以在不同的线程池上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala Futures 如何与 flatMap 链接在一起? 的相关文章

  • Scala 2.10、Double.isNaN 和拳击

    在 Scala 2 10 中 是someDouble isNaN预计装箱 运行我的代码调用 isNaN通过反编译器 我仍然看到对double2Double在我的代码中 鉴于新的AnyVal在 2 10 中工作 我希望它不会比java lan
  • Either 相当于受检查的异常吗?

    从 Scala 开始并阅读有关Either我很自然地将新概念与我所知道的东西 在本例中来自 Java 进行比较 与之前有什么区别吗concept检查异常和Either 在这两种情况下 失败的可能性在方法中明确注释 throws或返回Eith
  • Spark - Scala - 用另一个数据帧中的查找值替换数据帧中的值

    我正在 Databricks 上使用 Spark 编程语言是Scala 我有两个数据框 主要数据框 见截图 1 https i stack imgur com EShir png 查找数据框 见截图3 https i stack imgur
  • 不使用 CPU 时 Cassandra 超时

    我使用 Phantom DSL 和 Datastax Cassandra 驱动程序时遇到 Cassandra 超时 然而 Cassandra 似乎并没有超载 以下是我得到的异常 com datastax driver core except
  • 如何在 Haskell 中枚举递归数据类型?

    这篇博文 http lukepalmer wordpress com 2008 05 02 enumerating a context free language 对于如何使用 Omega monad 对角枚举任意语法有一个有趣的解释 他提
  • 《使用 Apache Flink 进行流处理》如何从 IntelliJ 运行书籍代码?

    如中所述这个帖子 https stackoverflow com questions 61043860 how to run first example of apache flink我无法成功运行 使用 Apache Flink 进行流处
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • 如何在Dotty中使用given?

    我在看Dotty下的文档Contextual Abstractions页面 我看到了Given Instances 给定实例 或者简单地 给定 定义了 规范 值 用于合成给定子句的参数的某些类型 例子 trait Ord T def com
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 了解如何使用 apply 和 unappy

    我试图更好地理解 的正确用法apply and unapply方法 考虑到我们想要序列化和反序列化的对象 这是正确的用法吗 即斯卡拉方式 的使用apply and unapply case class Foo object Foo appl
  • scala/spark 代码不允许在 hive 中添加列

    如果源数据有新列 我尝试在 Hive 表中添加一列 所有新列的检测都运行良好 但是 当我尝试将列添加到目标表时 我收到此错误 for f lt df schema fields if f name chk spark sqlContext
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 如何从 SparkSQL DataFrame 中的 MapType 列获取键和值

    我的镶木地板文件中有数据 该文件有 2 个字段 object id String and alpha Map lt gt 它被读入 SparkSQL 中的数据帧 其架构如下所示 scala gt alphaDF printSchema ro
  • flutter 中 Future.delayed 与 Timer 有什么区别

    我想知道延迟代码执行的 Future delayed 和 Timer 方法之间的区别 两者似乎都做同样的事情 未来 延迟 Future delayed const Duration milliseconds 500 code VS Time
  • 使用spark phoenix从表中读取rdd分区号为1

    当我运行我的火花代码时 val sqlContext spark sqlContext val noact table primaryDataProcessor getTableData sqlContext zookeeper table
  • 对 Scala Not Null 特征的库支持

    Notice 从 Scala 2 11 开始 NotNull已弃用 据我了解 如果您希望引用类型不可为空 则必须混合魔法NotNull特征 编译器会自动阻止你输入null 可以值在里面 看到这个邮件列表线程 http www nabble
  • 使用 scala 在 Flink 中进行实时流预测

    弗林克版本 1 2 0斯卡拉版本 2 11 8 我想使用 DataStream 来使用 scala 中的 flink 模型进行预测 我在使用 scala 的 flink 中有一个 DataStream String 其中包含来自 kafka
  • 玩:将表单字段绑定到双精度型?

    也许我只是忽略了一些明显的事情 但我无法弄清楚如何将表单字段绑定到 Play 控制器中的双精度型 例如 假设这是我的模型 case class SavingsGoal timeframeInMonths Option Int amount
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码

随机推荐

  • 为什么“df.lookup”比“df.min”慢?

    我想通过使用来减少一些时间lookup after idxmin 而不是调用min and idxmin 在我看来 第一个应该更有效 因为在第二个中需要搜索两次值 一次搜索最小值 另一次搜索最小值的索引 即 2 倍 O NxM 而在首先 搜
  • VSCode:添加新的活动栏条目和自定义“页面”

    我想在开发扩展时添加新的活动栏条目并创建自定义 页面 这可能吗 我的想法是在 VSCode 中创建一个像 Sequel Pro 一样的数据库管理器 v 1 23 添加了扩展作者向活动栏添加图标的功能 自定义活动栏视图 https code
  • 如何获取多字节字符串的字节大小

    如何在 Visual C 中获取多字节字符串的字节大小 有没有函数或者我必须自己计算字符 或者 更一般地说 如何获得 TCHAR 字符串的正确字节大小 解决方案 tcslen T TCHAR string sizeof TCHAR EDIT
  • 这个吐司是从哪里来的?

    由于某种原因 我正在开发的应用程序正在显示一个 toast 显示我的设备上剩余的内部存储空间 即使我没有对此进行编码 这是一个屏幕截图 https i stack imgur com z2ERU png https i stack imgu
  • Python 2.7 的蓝牙? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对 Python 2 7 进行蓝牙编程的最佳方法是什么 我尝试使用pybluez https code
  • 使用预定脚本部署 Shiny App

    我有一个简单的脚本 可以在 Rstudio 中用于部署应用程序 rsconnect setAccountInfo name xx token xx secret xx xx library rsconnect deployApp xxx l
  • 链接后台 NSURLSession 上传

    有人成功链接 NSURLSession 后台上传吗 我正在尝试使用 NSURLSession 的后台上传来上传 5 MB 的巨大视频文件 上传必须按顺序进行 整个事情在前台工作得很好 我为此使用 AFNetwoking 它是多部分上传 但是
  • 尝试从一个页面推送到另一页面时出现“找不到组件工厂”错误

    尝试从一个页面推送到另一页面时出现错误 当我尝试推送到同一页面时 它不会给出该错误 只有我在从一个页面推送到另一页面时遇到错误 setRoot 也没有给出错误 this navCtrl push Page7 我已将 Page7 添加到 ap
  • Pandas fillna() 基于特定列属性

    假设我有这张桌子 Type Killed Survived Dog 5 2 Dog 3 4 Cat 1 7 Dog nan 3 cow nan 2 其中的价值之一Killed缺少 Type Dog 我想将平均值归咎于 Killed for
  • 最好的 SQL Server 性能优化技术是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我始终采取的方法是首先使用最少的索引集部署数据库 然后根据性能要求添加 更改索引 这种方法效果相当好 但是 它仍然没有告诉我可以在哪里
  • Rails 4.0 的自定义错误处理

    我正在使用 Ruby 2 0 和 Rails 4 0 构建 Ruby on Rails api 我的应用程序几乎只是一个 JSON API 因此如果发生错误 500 404 我想捕获该错误并返回格式良好的 JSON 错误消息 我试过了thi
  • 子集化 data.frame 时的 NA 会发生一些意想不到的事情

    考虑以下代码 当你没有明确测试NA在您的情况下 该代码将在稍后您的数据发生更改时失败 gt A toy example gt a lt as data frame cbind col1 c 1 2 3 4 col2 c 2 NA 2 3 c
  • 如何使 MapView 对象透明(alpha)?

    All 我需要在 MapView 对象上显示信息 那里没有问题 问题是 有时 MapView 对象显示的地图详细信息在视觉上与我的叠加数据相竞争 因此 我想做的是提供一种通过使用 alpha 通道在视觉上 缩小 MapView 对象的方法
  • 如何自动检测用户的时区?

    您好 我正在创建一个网络应用程序 如果用户注册 我们将显示创建日期 为此 我们在我的sql表中使用当前时间戳 它显示服务器时间 但我们不知道如何根据用户时区转换时间 因为我们不是获取用户所在国家 地区 任何人都可以帮我解决它吗 提前致谢 使
  • “return 0”和“exit (0)”之间的区别[重复]

    这个问题在这里已经有答案了 有什么区别吗return 0 and exit 0 在函数中使用时 如果是 我应该什么时候使用return 0 or exit 0 在一个函数中 return退出该函数 同时exit退出程序 In main函数执
  • backbone.js 收集事件

    我开发了一个 jquery 和backbone js 网络应用程序 一个组件有一个 html 表 该表后面是一个backbone js 集合 该集合中的任何更改都会导致 html 表的更新 所以我写 this collection bind
  • UITableView重新加载数据

    我正在为 iPhone 制作一个基于导航的应用程序 我的视图控制器之一如下所示 interface NewComputerViewController UIViewController
  • 什么时候会使用 BRICK 权限?

    在Android中 曾经有一个名为BRICK http developer android com reference android Manifest permission html BRICK可用于潜在地禁用该设备 除了将其视为都市神话
  • 除 None 之外的任何类型的 Mypy 注释[重复]

    这个问题在这里已经有答案了 我怎样才能注释一个类型 除了None 换句话说 这个类型是Any但不是None 你可以做Union int str 但排除None来自那个工会
  • Scala Futures 如何与 flatMap 链接在一起?

    我正在 Scala 中首次使用 Futures 并且正在研究使用 flatMap 组合器的示例 我一直在关注这个讨论 http docs scala lang org overviews core futures html http doc