是否可以在Clojure中进行数据类型继承?

Chr*_*ris 8 functional-programming clojure

例如,如果我有两个不同的记录,但它们共享一些公共字段,有没有办法让两个记录共享一个共同的基本记录?看起来协议只允许声明方法签名.

Ank*_*kur 4

我认为目前还不可能。

defrecord只是一个宏,您可以通过使用来检查它的作用macroexpand,例如:

(macroexpand '(defrecord User [Name Age]))
Run Code Online (Sandbox Code Playgroud)

因此,如果您想要这样的记录继承,您可能需要实现一个宏来执行此操作。但我不建议继承是我试图避免的事情,因为它会导致复杂性。