本文介绍了我可以使用Clojure的派生创建我的defrecord类类型的层次结构吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做类似的操作:

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

(derive Person Base)
(derive Animal Base)

(isa? Animal Person)

这是否可能?

我以后意识到这是不可能的,所以我做这样的事情:

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?

推荐答案

否。记录是Java类。由于页面指出:

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

您不能扩展具有记录的类,但您可以。使用接口在Java类层次结构中播放,您可能能够使某些工作。

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.

这篇关于我可以使用Clojure的派生创建我的defrecord类类型的层次结构吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-18 05:50