Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use Clojure's derive to create a hierarchy of my defrecord class types?

I would like to do something like:

(defrecord Base [])
(defrecord Person [])
(defrecord Animal [])

(derive Person Base)
(derive Animal Base)

(isa? Animal Person)

Is this possible?

Update:

I've since realized that this is not possible so I am doing something like this:

(defmulti type class)
(defmethod type Base [_] ::base )
(defmethod type Animal [_] ::animal )
(defmethod type Person [_] ::person )

Does this make sense or is there a better way?

like image 644
yazz.com Avatar asked Jan 03 '11 17:01

yazz.com


1 Answers

No. Records are Java classes. As the multimethods page states:

You can also use a class as the child (but not the parent, the only way to make something the child of a class is via Java inheritance).

You can't extend classes with records but you can implement interfaces. Using interfaces to play in the Java class hierarchy, you might be able to make something work.

like image 109
Alex Miller Avatar answered Oct 23 '22 10:10

Alex Miller