gpt4 book ai didi

scala - 用 for-comprehension 替换 flatMap/map 链

转载 作者:行者123 更新时间:2023-12-01 08:48:16 31 4
gpt4 key购买 nike

我正在尝试将理解用于以下内容:

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]]

有没有办法用 for-comprehension 简明扼要地写出来?

最佳答案

无论如何,不​​鼓励在同一个 for-comprehension 中使用不同的集合(在这里很难抗拒使用 M 字),并且在一般情况下它不会起作用。选项序列之所以有效,是因为 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))

关于scala - 用 for-comprehension 替换 flatMap/map 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017189/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com