【发布时间】:2016-11-02 04:00:43
【问题描述】:
据我所知functor 是一个从其他模块返回模块的函数
这样它的签名是* -> *
那么根据定义,Companion 对象中的apply 方法是函子吗??
例如,
case class A(id: Double)
object A {
def apply(intId: Int) = A(intId.toDouble) // Functor: Double -> A
}
我说的对吗?
我的问题是
1) 伴生对象中的apply 方法可以被视为 Functor 吗?
2) 如果functor 是一个从其他实例创建实例的公正函数,那么函子和构造函数有什么区别
【问题讨论】:
-
我们在谈论哪个函子?数学定义还是来自 scalaz/cats 的定义?
-
@YuvalItzchakov 感谢您的评论。我说的是函子的数学定义。
-
@YuvalItzchakov:看起来 OP 正在谈论 Functor 的 ML 概念,其中 Functor 是模块系统的一个特征。 ML 中的模块不是一流的,因此您不能将它们传递给函数或从函数返回它们。函子本质上是模块系统内部的函数:它们将模块作为参数并返回模块。 (Functor 的另一个含义是来自 C++ 的那个,它基本上意味着任何具有
operator()的对象。)