我认为我没有完全理解“理解”机制的内部运作原理。 在下面的代码中,前两个“用于理解”可以编译,但第三个(前两个的组合)则不能编译。
如何更改代码才能编译并运行? 谢谢
object Test {
val lst: List[Int] = List(1,2,3,4)
val optList: Option[List[Int]] = Option(lst)
for {
num: Int <- lst
} yield num
for {
qn: List[Int] <- optList
} yield qn
for { // Error: Type mismatch. Required: Option[B_], found: List[Int]
qn: List[Int] <- optList
num: Int <- qn
} yield num
}
您的代码可以在 Scala 3 中编译并使用。对于 Scala 2,添加显式转换(Scala 3 隐式执行的操作):
for {
qn: List[Int] <- Option.option2Iterable(optList)
num: Int <- qn
} yield num
答案类似于 Luis Miguel Mejía Suárez 的评论:“只需将 Option 转换为列表即可”。