我最近一直在使用Clojure的类型和记录,我想知道这些是非常新的概念,还是受到Common Lisp对象系统的启发?
答案 0 :(得分:12)
我相信它们在Clojure中几乎都是新的创新。
CLOS是一个相当复杂,功能齐全的面向对象系统。它具有您经常听到的各种OOP技术,并且存在于其他面向对象的语言中 - 多继承,动态调度,泛型函数等。
Clojure采用不同的方法 - 类型和记录比完整的OOP简单得多,并不打算构成完整的OOP系统。相反,我理解设计的动机是:
如果你想要一个像CLOS这样的传统面向对象系统,那么就可以在Clojure中在类型和记录之上构建它。您还可以直接在Clojure中使用Java风格的面向对象。但是我相信Clojure专家通常不会推荐它--Clojure通常会为您提供不同或更好的方法来解决相同的问题。
一般而言 - Clojure倾向于为您提供“简单”工具,您可以编写这些工具来解决手头的问题,而不是在任何时候规定复杂的框架。这是一个interesting philosophy discussed at some length in this video by Stuart Halloway。