函数式编程Monad,Functor,Applicative

图解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 方法就好了。函数

相关文章
相关标签/搜索