Dan*_*ral 102
我听到的故事是两个杰出的Scala程序员在配对时,其中一个开始编写这样的代码:
option match {
case Some ...
Run Code Online (Sandbox Code Playgroud)
此时另一个人说"这是什么?业余时间?平面地图那个狗屎!"
至于什么是如此强大flatMap,嗯...首先,它是基本的monadic运算符.这意味着它是一个共同的操作,例如,容器(例如Option,集合等),延续,状态等等.其次,虽然你可以解构一个Option,而flatMap不是一个monadic操作,所以它不能广泛应用.此外,它需要太多关于您正在操作的数据的知识.
注意:之前我说过匹配比速度慢flatMap- 事实上情况恰恰相反,直到最新版本的Scala,在撰写本文时,2.10.1.)
Jen*_*der 54
这句话背后的原因是,您可以使用对flatMap(以及其他更高阶函数)的调用来替换很多繁琐的if/then/else代码.
选项尤其如此(参见http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/)
但它也适用于其他monad(虽然我不得不承认,我自己并不完全理解细节)
想象一下您有一个集合要为其应用函数(或一系列函数)的情况,其中每个函数可能返回null.当您实际使用null时,您的代码将充满空检查.但是,如果你使用的选项,而不是值,你可以用flatmap所需的函数值,链接的功能的多种功能的情况下,并得到一个集合,只是不为空,这在很多情况下,是什么结果你要.
由于这种描述相当令人费解,因此较短的建议"只是简单地说明了".
Sub*_*oid 12
关键flatMap是它是Scala对monadic绑定操作的表示.网上有很多教程解释monad的目的以及为什么它们如此有用; James Iry有一个细节.
Runar Bjarnason是你寻找起源的人.
意识到为什么它如此强大是一种只有时间才能诚实的东西.Option类是开始查看如何将一系列查找(例如)重复平面映射到最终结果的最佳位置.