【问题标题】:Why Haskell has classes and inheritance [closed]为什么 Haskell 有类和继承
【发布时间】:2018-04-11 12:34:24
【问题描述】:

Haskell 定义为函数式编程语言。

那为什么在 Haskell 中有类和继承。

这样不是同时OOP和FP吗???

如何使用函数式编程在 Haskell 或 Javascript 中创建多态。

【问题讨论】:

  • Haskell 中没有继承。类型类与类不同(实际上它更像接口)。
  • 谢谢,您能否提供相同的示例如何在 Haskell 或 Javascript 中创建多态性(首选)。我不明白我是否有一些子类来覆盖父方法?
  • 此外,继承不是面向对象语言的必需特性。
  • 我在“太宽泛”和“不清楚你在问什么”之间左右为难。这个问题需要做很多工作。
  • @sandwood 人们通常会问“如何将 feature-X 翻译成 Haskell?”当他们应该真的问“我如何在 Haskell 中解决问题-Y,为此我在语言-Z 中使用 feature-X?”大多数情况下,如果您能正确识别问题-Y,那么您在语言-Z 中使用功能-X 的事实就不再重要了。

标签: haskell


【解决方案1】:

你的前提在两个方面都有缺陷:

  • 继承和 OOP 是两个几乎正交的概念。尽管继承与主流的 OO 语言(尤其是 Java 和 C#)密切相关,但可以说这些与原始精神不太相符。
    OO 的真正意义在于,与其直接操纵其他地方的状态,不如发送“消息”发送到知道如何安全地执行此操作的对象。
    https://www.aomran.com/object-oriented-programming-is-not-about-objects/
    这实际上并不适用于 Haskell,因为它一开始就没有可变状态。
  • Haskell 没有 Java 风格的继承(子类型)。它甚至没有 Java 风格的类:Haskell 类是 typeclasses,它更对应于 Java 接口。

【讨论】:

  • 谢谢,但我怎样才能创建多态方法。例如有基类 Field 和子类 TextField、SelectField 并覆盖一些方法?
  • 你不能。您可以做一些类似结果的事情,但这与您在此处提出的问题确实是一个不同的问题(并且需要更详细的问题描述)。不要编辑问题以走向完全不同的方向。
  • 我问了但没人回答:stackoverflow.com/questions/49767962/…
  • @user2693928 这似乎是一个非常不同的问题(特别是因为它是关于 JavaScript 中的类,尽管名称相似,但在几乎所有方面都与 Haskell 中的类型类完全不同)。如果您的目标是使用 JavaScript 中的类,那么了解 Haskell 中的类型类将无助于您实现这一目标(并不是要阻止您学习 Haskell,只是它们真的不同并且类型类知识不会真正转移到 JavaScript 类)。
猜你喜欢
  • 2020-08-30
  • 2013-02-16
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多