当我刚开始学习Scala时,我很喜欢for-comprehensions。它们似乎有点像我从Java 5中习惯的foreach循环,但具有函数式限制和许多优雅的句法美感。
但随着我吸收Scala风格,我发现每次我可以使用for-comprension时,我都会改用map
, flatMap
, filter
, reduce
和foreach
。这种方式对于我的意图来说更加清晰,隐藏的意外也更少,而且通常代码也更短。
据我所知,for-comprehensions总是被编译成这些方法,那么我想知道:它们实际上是用来做什么的?我是否错过了一些函数式启示(这不是第一次)?for- comprehensions是否能够执行其他功能无法完成或者非常繁琐的任务?在特定用例下它们表现突出吗?还是只是个人口味的问题?
yield
是什么,而这个问题想知道它的目的是什么。答案大致相同。 - Daniel C. Sobral