gpt4 book ai didi

clojure - CLOS 与 Clojure 的类型和记录功能有何关系?

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:16 24 4
gpt4 key购买 nike

我最近一直在研究 Clojure 的类型和记录,我想知道这些是不是很新的概念,或者它们是否受到了 Common Lisp 对象系统的启发?

最佳答案

我相信它们几乎是 Clojure 中的新创新。

CLOS 是一个相当复杂、功能齐全的面向对象系统。它具有您经常听到的各种 OOP 技术,这些技术存在于其他面向对象的语言中 - 多重继承、动态调度、泛型函数等。

Clojure 采用不同的方法 - 类型和记录比完整的 OOP 简单得多,并且无意构成完整的 OOP 系统。相反,我了解该设计的动机是:

  • 相信许多 OOP 技术在构建大型系统时实际上是有害的——例如实现继承
  • 有机会在最常见的多态性情况下(即类型单一分派(dispatch))获得最佳性能(即与 Java 相同)
  • 解决“expression problem”的愿望,您可以在 Clojure 中使用 deftype/defrecord 和协议(protocol)来完成
  • 意图使所有记录/类型不可变,以符合 Clojure 的其他哲学

如果您想要像 CLOS 这样的传统面向对象系统,可以在类型和记录之上的 Clojure 中构建它。您还可以直接在 Clojure 中使用 Java 风格的面向对象。但是我相信 Clojure 专家通常不推荐它 - Clojure 通常会为您提供不同或更好的方法来解决相同的问题。

总的来说,Clojure 倾向于为您提供“简单”的工具,您可以组合这些工具来解决手头的问题,而不是随时指定一个复杂的框架。这是一个interesting philosophy discussed at some length in this video by Stuart Halloway .

关于clojure - CLOS 与 Clojure 的类型和记录功能有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700021/

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