题的功能是口齿不清,据报告,没有在所有面向对象的,即使它运行的JVM,虚拟机设计,用于一个面向对象的语言。题提供相同的接口迭代表和矢量通过抽象他们一个接口,称为seq.这是甚至实施国内使用Java口称为ISeq.这不是一个例子面向对象的抽象?怎么可以声称,题不是面向对象?

我猜测一个必然结果这一问题时可以多被视为不同对象的方向?

有帮助吗?

解决方案

惯用的Clojure有利于限定于一个非常小的组核心数据结构的操作独立功能;这个分拆的方法和数据是违反面向对象和赞成功能风格强烈的声明。丰富的希基(Clojure的创建者)一再声明这一点的重要性;例如这里:“的Clojure避开创建为每个新的形势新的数据类型,而是更愿意建立一个传统的面向对象方法上的一个小组的类型大库的功能。“

这是核心数据结构的依赖,因为你只能收获来自Clojure的STM当您使用Clojure的持久数据结构的全部好处更是Clojure中比在其他功能的语言很重要的。

  

我想的推论这个问题---时可以多态性被认为从对象取向不同?

我使用Clojure的多方法(即多晶型设备)派遣到基于文件名的扩展名不同的实施方式

- 不是在所有的面向对象的,但是多晶型

其他提示

  

我想的推论这个问题---时可以多态性被认为从对象取向不同?

多态性绝对没有关于对象的方位。它只是意味着相同的操作可以不同的行为取决于其操作数的类型(一个或多个)。

像ML或Haskell的

函数式语言有多态性超过30年,有人用PL历史有更好的认识大概可以指出一些例子预-1962(即预OO)。

克里斯托弗斯特雷奇在1967年描述的区别参数多态性和特设多态之间,所以多态性必须具有已经然后存在。由于多态性在二OO Simula中,67只介绍,我的猜测是多态的必须的有它在OO推出之前就已经存在。

请记住,之类的东西ISEQ是Java。

在Clojure中的SEQ抽象是真的只是“东西”,你可以提供给第一,休息和第n个功能(注意不先调用一个序列,你首先调用一个序列参数)。 Clojure的语言核心功能都在收藏,seqs,或原始类型进行操作。有没有在公开的接口方法绑定数据。所以Clojure的实施是在Java和JVM与互操作所有将要涉及到类/对象,但Clojure的语言本身没有。

捆绑与数据结构的方法是什么的Clojure阻碍。

说了这么多......现实是,功能做对,他们将与哪些参数限制。第一休息和第n个只会上的东西,可以是一个序列工作。从这个角度来说没有太大的差异是否该数据结构与方法或不捆绑 - 你还是要正确地匹配起来。大胜利来自灵活性。功能可以被写入到带任何参数,然后用高阶函数组成没有定义类等:

(def farms [{:name "Swansea", :value 100}
            {:name "Broadmarsh", :value 200, :produce [:corn :wheat :rye]}
            {:name "Snug", :value 50, :animals [:goats :pigs]}])
(reduce + (map :value farms))
-> 350
(reduce + (map :value (filter :animals farms)))
-> 50

Clojures多态性是一个自然延伸。在java方法 派遣根据类。 在题,这是扩展到允许派遣调用基于任何你想要的东西。其仍然很容易调度上类,事实上大多数时候这就是如何做。如果你想要别的东西,然后你可以 写你自己的调度。 该建立在功能 derive 创建基于层次上任何你想要的然后派对 isa.

更善良: http://clojure.org/multimethods

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top