Scala 中的条件未来

2024-05-21

给定这两个 future,仅当条件为真时我才需要运行第一个 future(请参阅if y>2)。但我有一个例外Future.filter predicate is not satisfied。这是什么意思以及如何修复该示例?

object TestFutures extends App {

  val f1 = Future {
    1
  }

  val f2 = Future {
    2
  }

  val y = 1

  val x = for {
    x1 <- f1 if y>2
    x2 <- f2
  }  yield x1 + x2


  Thread.sleep(5000)
  println(x)
}

该问题包含一些术语问题。

鉴于要求,“仅当条件为真时,我才需要运行第一个(未来)”,那么该要求的一种可能的实现是:

val f1 = if (cond) Some(Future(op)) else None

这是因为一个Future一旦定义就会开始执行。

回到问题中的表达:

val x = for {
  x1 <- f1 if y>2
  x2 <- f2
}  yield x1 + x2

这是在说“我想要result of f1 if(cond)”而不是“我想execute f1 if(cond)".

这将是一种方式:(注意 future 是如何在 for 理解中定义的,并且条件在外部):

val x = if (y > 2) {
  for {
      x1 <- Future(op1)
      x2 <- Future(op2)
  }  yield x1 + x2
} else ???

在 for 理解中正确使用守卫是根据来自 for 理解所表达的计算的值来评估表达式。例如:

“我想要execute f2仅当结果为f1大于y"

val x = for {
  x1 <- f1
  x2 <- Future(op) if x1 > y
}  yield x1 + x2

请注意这里的条件如何涉及计算的中间结果(x1在这种情况下)


旁注:要等待未来的结果,请使用Await.result(fut, duration)代替Thread.sleep(duration)

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

Scala 中的条件未来 的相关文章

  • scala sbt 在多项目上测试运行设置和清理命令一次

    我知道我可以通过修改 testOptions 在 sbt 中添加设置和清理代码以用于测试阶段 例如 val embedMongoTestSettings Seq Setting Seq testOptions in Test Tests S
  • 如何从 Scala repl 中取消导入隐式?

    是否可以从 repl 中取消导入隐式内容 说我做这样的事情 scala gt import scala math BigInt import scala math BigInt scala gt implicits 2 implicit m
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • scala.collection.breakOut 与视图

    这个答案 https stackoverflow com a 1716558 936869描述如何scala collection breakOut可用于防止创建浪费的中间集合 例如 这里我们创建一个中间体Seq String String
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Spark RDD默认分区数

    版本 Spark 1 6 2 Scala 2 10 我正在执行以下命令spark shell 我试图查看 Spark 默认创建的分区数量 val rdd1 sc parallelize 1 to 10 println rdd1 getNum
  • 我想使用 EtherPad(或克隆版本)。我的站点正在运行 Ruby on Rails。 API 还是本地安装?

    我想在我的网站上使用 etherpad 界面 两个问题 1 是否有任何带有 etherpad api 的网站可以让我远程调用 2 如果没有 安装scala并让两者同时运行有多麻烦 Thanks 查看http piratepad net ht
  • Scala - 如何解决“值不是 Nothing 的成员”错误

    此示例代码基于 Atmosphere 类 但如果有人可以让我了解该错误的一般含义 我想我可以找出任何特定于 Atmosphere 的解决方案 val bc BroadcasterFactory getDefault lookup broad
  • 如何使用 apply/unapply 方法重现案例类行为?

    我尝试用普通类和伴生对象替换案例类 但突然出现类型错误 编译良好的代码 综合示例 trait Elem A B def C other Elem C A Elem C B other match case Chain head tail g
  • Scala 中值类的隐式 Json 格式化程序

    我有许多值类组成了一个更大的对象案例类 final case class TopLevel foo Foo bar Bar final case class Foo foo String extends AnyVal final case
  • Scala 相当于 Java 的 Number

    我正在尝试为数值域类型构建类型层次结构 例如AYear is an Int 这是一个Number a Percentage is a Double 这是一个Number等等 我需要层次结构以便我可以调用toInt or toDouble关于
  • 最小重复子串

    我正在看 Perl代码高尔夫页面 http www perlmonks org node id 82878 不要问为什么 并遇到了这个 第 3 洞 最小重复图案 编写一个子例程 它接受一个字符串 该字符串可能包含 重复模式 并返回最小的重复
  • Scala:类似 Option (Some, None) 但具有三种状态:Some、None、Unknown

    我需要返回值 当有人询问值时 告诉他们以下三件事之一 这是值 没有价值 我们没有关于该值的信息 未知 情况 2 与情况 3 略有不同 示例 val radio car radioType 我们知道该值 返回无线电类型 例如 pioneer
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • 错误:协变类型 A 出现在逆变位置

    我试图写一个不可变的Matrix A 班级 我希望该类是协变的A但是当我把 在 前面A编译器开始抱怨类中的某些操作 以下是我的相关子集Matrix类 实际类比以下子集大 5 倍左右 class Matrix A private val co
  • 缓存 Slick DBIO 操作

    我正在尝试加快 SELECT FROM WHERE name 的速度Play 中的查询类型 Scala 应用程序 我正在使用 Play 2 4 Scala 2 11 play slick 1 1 1 包 该软件包使用Slick 3 1版本
  • 玩:将表单字段绑定到双精度型?

    也许我只是忽略了一些明显的事情 但我无法弄清楚如何将表单字段绑定到 Play 控制器中的双精度型 例如 假设这是我的模型 case class SavingsGoal timeframeInMonths Option Int amount
  • Scala 解析器组合器的运算符优先级

    我正在研究需要考虑运算符优先级的解析逻辑 我的需求并不太复杂 首先 我需要乘法和除法比加法和减法具有更高的优先级 例如 1 2 3 应视为 1 2 3 这是一个简单的例子 但你明白了 我需要将更多自定义标记添加到优先级逻辑中 我可以根据此处
  • 在 IntelliJ 中运行 Spark 字数统计

    我花了几个小时浏览 You Tube 视频和教程 试图了解如何在 Scala 中运行 Spark 字数统计程序 并将其转换为 jar 文件 我现在完全糊涂了 我运行了 Hello World 并且了解了如何在 Apache spark sp

随机推荐

  • 使用 Google 地图 API 进行地址验证

    我的任务是验证输入到我当前正在创建的系统中的地址 系统要求输入的地址根据有效的数据源进行验证 在英国 数据集来自皇家邮政 访问费用昂贵 所需的数据是整个欧洲的邮政编码信息 首先通过 API 访问到 Web 应用程序 有很多公司提供这项服务
  • 如何将 CodeBlocks 与最新版本的 VC++ 编译器一起使用?

    我需要将 C B 与最新版本的 MS VC 编译器 例如 VS2015 或 VS2017 中的编译器 以及最终的未来版本一起使用 但 C B 不提供此类选项 C B 允许用户从设置中的列表中选择的最新 VC 版本是 VC 2010 MSVC
  • Apache 2.4 URL 重写:/server/?Server=ServerName 到 /server/ServerName [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我试图简单地将 URL 重写为 server ServerName from server Server ServerName所以这样
  • 方法的表达式开头非法

    所以我试图打开 关闭 重新打开 读取并将数组转换为一维数组和二维数组 public class Assigntment2Condensed public static void main String args throws IOExcep
  • 我需要在Django+Gunicorn+GEvent+Boto结构中调用monkey.patch_all()吗?

    我的网站使用的是 Django Gunicorn GEvent 我必须使用 Boto for DynamoDB 的一个功能 我需要调用monkey patch all 来使Boto变成greenlet吗 如果您使用默认的工人阶级配置 那么你
  • 初始化参数时会发生什么? C++

    void foo int i int k 7 cout lt lt k int main foo 1 2 k将输出2 我的问题是 foo 按什么顺序初始化参数并获取参数 foo 得到 2 的过程是什么 谢谢 void foo int i i
  • 如何将两个long转换为字节数组=如何将UUID转换为字节数组?

    我正在使用 JavaScriptUUID并且需要将 UUID 转换为字节数组 奇怪的是 UUID 类不提供 toBytes method 我已经了解了这两种方法 UUID getMostSignificantBits and UUID ge
  • 如何对ArrayList(int)进行排序

    我怎样才能排序Arraylist按升序和降序排列 例子 ArrayList list new ArrayList list Add 2 list Add 8 list Add 0 list Add 1 如何按升序和降序对上面的列表进行排序
  • 如何在 R 中 fork 进程

    我试图了解 R 多核包实现的分叉系统 包的例子是 p lt fork if inherits p masterProcess cat I m a child Sys getpid n exit I was a child cat I m t
  • React-redux useDispatch() 未捕获类型错误

    我正在尝试创建一个简单的组件来使用 React Redux 钩子分派操作useDispatch 我收到一个错误 我已将组件修剪到发生错误的位置 当调用 useDispatch 函数时会发生这种情况 import useDispatch fr
  • 在 jenkins 中运行 Maven 项目时出现 java.lang.reflect.InitationTargetException

    这是堆栈跟踪树 我在 Jenkins 中运行我的 Maven 项目时得到的 我不明白我的代码有什么问题 也许是因为 Jenkins 中的一些插件 lt JENKINS REMOTING CAPACITY gt channel started
  • 有没有办法等待原子整数的变化

    有没有办法等待AtomicInteger这样我就不必继续休眠当前线程并继续检查AtomicInteger像这样 while atomicInt get gt 0 Thread sleep 1000 我知道有这样的事情CountDownLat
  • Jetty 中不同端口上的独立 Web 应用程序

    我需要以下设置 Jetty 必须监听端口8080 and 9090 每个端口必须有自己单独的应用程序 即webapp1运行于8080 and webapp2 on 9090 网络应用程序只能在其指定端口上访问 即webapp2一定不 可在港
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 如何获取通讯录图片数据的裁剪框?

    AddressBook 框架提供 ABPersonCopyImageData 用于获取每个地址簿条目的联系人图像 这对于图像数据来说非常有用 但用户也可以出于框架目的调整图像的大小和裁剪图像 当我获取图像数据时 我得到的是完整图像 而不是裁
  • JTextArea 中的密码

    有什么办法使用JTextArea当用户键入时隐藏文本 有点像密码 in JTextArea我有 密码 在最后一行中 用户在该行中键入的任何内容都不应该可见 我尝试过setForeground将字体颜色设置为文本区域颜色的方法 这使得文本不可
  • 如何从 C# 代码访问 wpf 中的 ResourceDictionary?

    我有一个DataTemplate在我想通过 C 代码访问的 xaml 文件中定义 谁能告诉我如何访问它 我添加了一个新的ResourceDictionary文件 其名称是Dictionary1 xaml 我有一个数据模板 例如
  • Django 使用 order_by 和 .annotate() 并获取相关字段

    我有以下数据 该查询按 topicid 分组 然后在每个组中获取最大日期 帖子频率并计算作为贡献者的作者数量 info model InfoModel objects values topicid annotate max Max date
  • Android Form与EditText使屏幕闪烁

    我不知道为什么当 EditText 聚焦然后滚动布局时我的 表单 活动会闪烁 它只发生在 Android 4 0 的设备上 我正在使用表布局并动态添加 TableRow 我的 TableRow 是这样的
  • Scala 中的条件未来

    给定这两个 future 仅当条件为真时我才需要运行第一个 future 请参阅if y gt 2 但我有一个例外Future filter predicate is not satisfied 这是什么意思以及如何修复该示例 object