clojure中的子类

时间:2016-11-20 20:41:44

标签: java clojure subclass

我正在学习Clojure,我想知道如何在Clojure中处理类似OO的子类。例如:一个主抽象类,两个抽象子类(每个都重新定义了一些函数),在第三层,最后的子类创建了"对象"将在函数中使用。不知道如何做到这一点。但是,我设法用一个抽象类来创建一个子类,使用defprotocol和defrecord。但我无法在另一个内部实施协议。感谢

2 个答案:

答案 0 :(得分:6)

您不需要类或子类。将您的数据表示为具有属性的地图。 “子类”可能有更多属性。

如果你的函数在属性上有所不同,那么要么使用基于属性的条件逻辑(if,cond等),要么根据多方法或协议使用多态,如果你真的需要的话。

用黑客帝国的话说,没有勺子。

答案 1 :(得分:2)

您可以使用以下协议进行继承:

(extend <subtype>
  <protocol>
  (merge (get-in <protocol> [:impls <basetype>])
         <map-of-redefined-methods>))

Multimethods使用derive为继承提供直接支持。

可以使用:extends关键字将实际Java子类关系指定为gen-class。不过,这仅适用于Java互操作。

一般来说,值得检查一下你是否真的需要继承。它通常不是Clojure中首选的建模方法。