Scala中的for语句是一种语法糖。
case 1: for (x) y
会转成:
case 2: for (x) yield y
会转成:
for中的类型匹配
会返回
。也就是说会对后面的值进行匹配,而null不会匹配
, 因此yield不会出
.
可以用
来查看编译器生成的代码,非常有用:
可以明显看到后面会有一个withFilter的操作。1
| for (x: String <- Seq("a", "b", null)) yield x
|
和 1
| for (x <- Seq("a", "b", null)) yield x
|
的结果是不同的,这一点要特别注意.
参考问题:http://stackoverflow.com/questions/41499441/explanation-on-scala-for-comprehension-with-option