史上最简单的Scala for推导教程

Scala 的 for  语法,本质上就是语法糖。并且十分简单,简单到简短的一篇文章,就可以说清楚。

Scala 中的 for 语句,都是帮你转换成类似 foreachmapflatMapwithFilterfilter 之类的语法。并且整个转化过程是递归的,容易理解的。

看完下面是几个例子,你就能立马掌握。这几个例子,是结合了 Scala 官方的yield文档 改进过来的。

第一个例子,转换成 foreach

会被scalac翻译成

注意,没有出现 yield 关键字。

再来一个:

会展开成:

然后 scalac会再针对里面的 for 再进行转换,直到所有的 for 被转换完。

第二个例子,先 flatMapmap

会被 scalac翻译成

注意,这里出现了 yield关键字。

再来一个:

会展开成:

然后再展开成

注意这里多了一个 yield 关键字,所以会用 flatMapmap 而不用 foreach

并且,前面的都使用 forMap(比如 c1),最后面使用 map(比如 c2)。

好了,有无 yield的区别讲完了,这也是最重要的区别了,剩下的都很简单,而且不管有无 yield,概念都一样。

接着往下。

第三个例子,尝试 withFilter ,不行再 filter

会翻译成

如果 c 没有 withFilter 方法,就使用 filter 方法:

第四个例子,加入其它值

会变成

结束

好了,scala 的 for 规则就结束了,就是这么简单。你肯定能记住。