我们知道 Swift 语言支持函数式编程范式,所以函数式编程的一些概念近来比较火。有一些相对于OOP来说不太一样的概念,比如 Applicative
, Functor
以及今天的主题 Monad
. 如果单纯的从字面上来看,很神秘,完全不知道其含义。中文翻译叫做单子
,但是翻译过来之后对于这个词的理解并没有起到任何帮助。
我的理解很简单,Functor
是实现了map
函数的容器,Monad
就是实现了 flatMap
方法的容器,比如在Swift里,Optional
, CollectionType
等等都可以称为 Monad。
既然有了 map, flatMap 又有什么作用呢?两者有什么联系和区别呢?
map vs flatMap
map 和 flatMap 的共同点都是接受一个 transform 函数,把一个容器转换为另外一个容器。
下面主要从维度
这一块来解释两者的区别,我们先来简单的定义一下维度
:
对于类型T,如果类型S是一个容器,且元素的类型包含T,那我们就说: S(维度) = T(维度) + 1
举个