我理解 for-expression 被翻译成 map 和 flatMap。但我发现了一些我无法解释的东西,需要你的帮助。以下是两个玩具示例:
for {
None <- List(Option(1),None)
} yield 0
//res0: List[Int] = List(0, 0)
Q1:为什么 Some(1) 映射到 0 ?我期待列表(0),
update1:
感谢@marios 的评论,这更奇怪。
for(None <- List(Some(1), None) ) yield None
返回List(Some(1), None)
。
update2:
有人说它是一个变量,但在 IDE 中,它确实链接到一个None
对象。
我使用 IntelliJ 将上述 for 表达式自动翻译为 map 表达式:
List(Option(1), None).map { case None => 0 }
//scala.MatchError: Some(1)
Q2:这个映射表达式的错误是预期的,而第一个问题中的 for 表达式没有给我这个错误。为什么他们得到不同的计算?