Functor-定义

定义

Functor 是一个一直以来没时间彻底弄清的一个概念,毕竟想好好学习下FP,所以还是要肯下来

More generally, the idea of mapping a function over each element of a data structure isn’t specific to the type of lists, but can be abstracted further to a wide range of parameterised types. The class of types that support such a mapping function are called functors.

这是来自haskell编程中的定义

翻译下

Functor 是一个容器类型,这个容器里面可以接受一个类型作为参数 比如 List[Int] List就是容器类型, Int就是类型参数
如果这个容器类型 可以支持一下 fmap函数则可以视作Functor

fmap :: (a->b) ->f a -> f b

这个容器类型的fmap方法接受一个函数,为第一参数, 一个容器类型f a为第二参数 生成 f b为结果

翻译:
[1,2,3,4].fmap(+1) // [2,3,4,5]

scala> val test = Option(5)
test: Option[Int] = Some(5)

scala> test
res0: Option[Int] = Some(5)

scala> test.map(_+1)
res2: Option[Int] = Some(6)

以上可以说明scala中的Option就是一个functor