在Scala中无法理解的结果
我理解为表达式被翻译成map和flatMap。但是我发现了一些我无法解释的事情,需要你的帮助。以下是两个玩具示例:在Scala中无法理解的结果,scala,functional-programming,pattern-matching,for-comprehension,partialfunction,Scala,Functional Programming,Pattern Matching,For Comprehension,Partialfunction,我理解为表达式被翻译成map和flatMap。但是我发现了一些我无法解释的事情,需要你的帮助。以下是两个玩具示例: for { None <- List(Option(1),None) } yield 0 //res0: List[Int] = List(0, 0) Q2:此映射表达式的错误是预期的,而第一个问题中的for表达式没有给出此错误。为什么计算结果不同?这两种方法返回相同的结果 for(None <- List(Some(1), None) ) yield No
for {
None <- List(Option(1),None)
} yield 0
//res0: List[Int] = List(0, 0)
Q2:此映射表达式的错误是预期的,而第一个问题中的for表达式没有给出此错误。为什么计算结果不同?这两种方法返回相同的结果
for(None <- List(Some(1), None) ) yield None
for(x <- List(Some(1), None) ) yield x
for(None这似乎是Scala编译器中的一个bug。状态为:“在第一步中,每个生成器p false}
”,然后是“a用于理解(pe′}
”
这意味着你的例子,for{None for(None for)(我一直在想同样的问题:掩蔽问题。我从来没有见过理解用询问者使用它的方式…非常奇怪,或者这有点普遍吗?不,它不是可变的。在IDE(IntelliJ工作表)中),它确实链接到Option
类型的None
对象。它是一种模式匹配。
for(None <- List(Some(1), None) ) yield None
for(x <- List(Some(1), None) ) yield x
List(Option(1),None).withFilter { case None => true; case _ => false }.map{case None => 0}