函数式编程Monad,Functor,Applicative

图解Moand:http://www.ruanyifeng.com/blog/2015/07/monad.html

  • flatMap:对自己解包,然后应用到一个闭包上,这个闭包:接受一个「未封装的值」,返回一个「封装后的值」。
  • map:对自己解包,然后应用到一个闭包上,这个闭包:接受一个「未封装的值」,返回一个「未封装的值」。
  • apply:对自己解包,然后对闭包解包,解包后的闭包:接受一个「未封装的值」,返回一个「未封装的值」。

map 和 flatMap 的共同点都是接受一个 transform 函数,把一个容器转换为另外一个容器。

 map 对 transform 的返回值没有做特殊的处理,flatMap 对于 transform 的返回值会做降维处理,比如 unwrap optional 值等。

其实可以反推,如果给定的 transform 函数会对调用者容器里的每个元素做升维,那我们需要用 flatMap 对它的结果进行降维,来保证调用 flatMap 前后维度保持一致。如果说 transform 调用前后维度没有变化,使用 map 方法就行了。

posted @ 2017-08-16 16:54  天涯海角路  阅读(130)  评论(0)    收藏  举报