Scala“用于理解”编译错误[重复]

问题描述 投票:0回答:1

我认为我没有完全理解“理解”机制的内部运作原理。 在下面的代码中,前两个“用于理解”可以编译,但第三个(前两个的组合)则不能编译。

如何更改代码才能编译并运行? 谢谢

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 compiler-errors
1个回答
0
投票

您的代码可以在 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 转换为列表即可”。

© www.soinside.com 2019 - 2024. All rights reserved.