当前位置: 首页 > 知识库问答 >
问题:

用for-comprehensive替换平面图/图链

景修杰
2023-03-14

我试图使用for理解以下内容:

val s: Seq[Option[Int]] = //...
val t: Option[Int] = //...

s.map(sv => t.flatMap(tv => sv.map(_ == tv))) 

我试过这个:

val r: Seq[Option[Boolean]] = for(
  sv <- s;
  tv <- t;
  svv <- sv
) yield svv == tv //Seq[Boolean] does not conform to Seq[Option[Boolean]]

有没有办法用< code > for-comprehensive 简洁地写进去?

共有2个答案

杭志泽
2023-03-14

我可能会混合一些东西以保持简单和简短:

val r: Seq[Option[Boolean]] =
  for (
    opt <- s;
    v <- t
  ) yield opt.map(_ == v)
阙新觉
2023-03-14

在同一个for-comprehension中使用不同的集合(在这里很难抗拒使用M-word)无论如何都是不鼓励的,而且在一般情况下也不会起作用。只有Scala为这种情况定义了一些隐式转换,选项序列才会起作用(因为它们很常见)。

你最好使用两个独立的理解,一个用于序列,另一个用于选项。

val s: Seq[Option[Int]] = List(Some(1), None, Some(2))
val t: Option[Int] = Some(2)

val result = for {
  elem <- s
} yield for {
  evalue <- elem
  tvalue <- t
} yield evalue == tvalue

println(result) // List(Some(false), None, Some(true))
 类似资料:
  • 我有一个场景,其中第二个单声道依赖于first stMono和ThridMono调用依赖于第二个单声道输出。 我写的代码如下。 我怎样才能避免这里的第二个平面图?。有没有办法在没有嵌套平面图的情况下做到这一点。我应该只在满足条件的情况下调用serrdMono。

  • 给定和: 如何将此转换为? 请注意,我提供了上述内容,作为在Scala中使用for constancement、Try和sequences的答案,但在将其转换为

  • 我已经找到了很多关于RxJava的答案,但我想了解它在Reactor中是如何工作的。 我目前的理解是非常模糊的,我倾向于认为map是同步的,flatMap是异步的,但我不能真正理解它。 以下是一个例子: 我有文件(a

  • 本文向大家介绍Opencv实现抠图背景图替换功能,包括了Opencv实现抠图背景图替换功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Opencv实现抠图替换背景图的具体代码,供大家参考,具体内容如下 下面简单图片演示一下: 提取mask: ===> 替换背景:  + = python的opencv代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐

  • 对electron 左上角窗口图标和状态栏的图标进行替换,再main.js中加上配置 开发运行时可以看到成功替换了,但是在打包后双击exe运行程序时发现还是默认图标 同时相对exe的图标进行替换进配置,该配置是中的projectName是有生效的,所以可以确定这个配置文件有运行。 打包后exe的图标也还是默认的 想问下该如何进行更改 相关版本信息 在网上有看很多解决方案,但是都差不多,并没有解决我

  • 我似乎真的不了解Map和FlatMap。我无法理解的是,for-comprehensiion是如何对map和flatMap的一系列嵌套调用的。以下示例来自 Scala 中的函数式编程 转化为 mkMatcher方法定义如下: 图案方法如下: 如果有人能在这里阐明使用map和flatMap背后的基本原理,那就太好了。