我想展平一系列的集合:
val test = for(i <- 1 to 3) yield {
if(i == 1)
Set.empty
else
Set(9, 1)
}
val b = test.flatten
这失败了:
但真正让我困惑的是为什么这有效?:
val test = for(i <- 1 to 3) yield {
if(i == 1)
Set.empty
else
Set(9, 1)
}
println(test.flatten)
// compiles and prints Vector(9, 1, 9, 1) when run
所以我的问题是:
println(test.flatten)
中的 flatten 和 val b = test.flatten
中的 flatten 调用有什么区别? 最佳答案
或者,应该可以反转您的条件并使其成为 for
中的守卫,并在那里使用您的 Set
:
val b = for {
i <- 1 to 3
if i != 1
j <- Set(9, 1)
} yield j
// b: scala.collection.immutable.IndexedSeq[Int] = Vector(9, 1, 9, 1)
关于scala - 调用 flatten 无法在一个用例上编译,但在另一个用例上有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45107536/