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