乍一看,这两种“类(Class)”有明显的区别。但是,我相信还有更多相似之处:
我可以看到 Haskell 中的“类”更加简洁,而且效率也更高。但是,我有一种感觉,从理论上讲,“类”和“抽象类”是相同的。
你怎么看?
最佳答案
呃,不是,不是。
一方面,Haskell 的类型类没有构造函数;数据类型。
此外,类型类实例并没有真正附加到它所定义的类型,它更像是一个单独的实体。您可以分别导入实例和数据定义,通常考虑“这条数据属于哪个类”并没有什么意义。类型类中的函数也没有对定义实例的数据类型的任何特殊访问。
类型类实际定义的是标识符的集合,这些标识符可以共享以对不同的数据类型进行概念上等效的事情(在某种意义上),在显式的每个类型的基础上。这就是为什么它被称为临时多态性,与从常规类型变量中获得的标准参数多态性相反。
它更接近于某些语言中的“重载函数”,其中不同的函数被赋予相同的名称,并且调度是基于参数类型完成的(由于某种原因,其他语言通常不允许基于返回类型的重载,尽管这对类型类没有问题)。
关于programming-languages - Haskell 中的 "class"和 OO 语言中的 "abstract class"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938779/