gpt4 book ai didi

programming-languages - Haskell 中的 "class"和 OO 语言中的 "abstract class"有什么区别?

转载 作者:行者123 更新时间:2023-12-04 16:56:18 24 4
gpt4 key购买 nike

乍一看,这两种“类(Class)”有明显的区别。但是,我相信还有更多相似之处:

  • 两者都有不同类型的构造函数。
  • 两者都定义了一组可以应用于特定类型数据的操作,换句话说,它们都定义了一个接口(interface)。

  • 我可以看到 Haskell 中的“类”更加简洁,而且效率也更高。但是,我有一种感觉,从理论上讲,“类”和“抽象类”是相同的。

    你怎么看?

    最佳答案

    呃,不是,不是。

    一方面,Haskell 的类型类没有构造函数;数据类型。

    此外,类型类实例并没有真正附加到它所定义的类型,它更像是一个单独的实体。您可以分别导入实例和数据定义,通常考虑“这条数据属于哪个类”并没有什么意义。类型类中的函数也没有对定义实例的数据类型的任何特殊访问。

    类型类实际定义的是标识符的集合,这些标识符可以共享以对不同的数据类型进行概念上等效的事情(在某种意义上),在显式的每个类型的基础上。这就是为什么它被称为临时多态性,与从常规类型变量中获得的标准参数多态性相反。

    它更接近于某些语言中的“重载函数”,其中不同的函数被赋予相同的名称,并且调度是基于参数类型完成的(由于某种原因,其他语言通常不允许基于返回类型的重载,尽管这对类型类没有问题)。

    关于programming-languages - Haskell 中的 "class"和 OO 语言中的 "abstract class"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938779/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com