尽管Clojure运行在JVM(一种为面向对象的语言而设计的VM)上,但Clojure是功能强大的Lisp,据报道它根本不是面向对象的。 Clojure通过将列表和 vector 抽象到称为seq的接口(interface),提供了用于迭代列表和 vector 的相同接口(interface)。这甚至可以使用称为ISeq的Java接口(interface)在内部实现。这不是面向对象抽象的例子吗?如何断言Clojure不是面向对象的?
我想这个问题的推论是-何时可以认为多态与面向对象不同?
最佳答案
惯用的Clojure支持定义独立功能,这些功能作用于非常少的一组核心数据结构;方法和数据的这种 bundle 是对面向对象并支持功能样式的有力说明。 Rich Hickey(Clojure的创造者)曾一再表示这一点的重要性;例如在这里:"Clojure eschews the traditional object-oriented approach of creating a new data type for each new situation, instead preferring to build a large library of functions on a small set of types."。
与其他功能语言相比,在Clojure中依赖核心数据结构更为重要,因为只有在使用Clojure的持久性数据结构时,您才能从Clojure的STM中获得全部 yield 。
我正在使用Clojure的多方法(即多态工具)基于文件名的扩展名调度到不同的实现-根本不是面向对象的,而是多态的。
关于oop - Clojure的核心是面向对象的吗? (序列中的多态),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1548209/