图解Moand:http://www.ruanyifeng.com/blog/2015/07/monad.htmlhtml
flatMap
:对本身解包,而后应用到一个闭包上,这个闭包:接受一个「未封装的值」,返回一个「封装后的值」。map
:对本身解包,而后应用到一个闭包上,这个闭包:接受一个「未封装的值」,返回一个「未封装的值」。apply
:对本身解包,而后对闭包解包,解包后的闭包:接受一个「未封装的值」,返回一个「未封装的值」。map 和 flatMap 的共同点都是接受一个 transform 函数,把一个容器转换为另一个容器。闭包
map 对 transform 的返回值没有作特殊的处理,flatMap 对于 transform 的返回值会作降维处理,好比 unwrap optional 值等。app
其实能够反推,若是给定的 transform 函数会对调用者容器里的每一个元素作升维,那咱们须要用 flatMap 对它的结果进行降维,来保证调用 flatMap 先后维度保持一致。若是说 transform 调用先后维度没有变化,使用 map 方法就好了。函数