函數式編程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 方法就好了。函數

相關文章
相關標籤/搜索