在Clojure类型机制的文档中,它指出:
为什么在这里使用具体派生?
然而,一些核心Clojure类使用具体派生(还有其他例子,但这些是唯一一个超类属于
- 具体派生是不好的
- 你无法从具体类导出数据类型,只能从接口导出
clojure.lang
的情况):
ARef
扩展AReference
Agent
扩展ARef
Atom
扩展ARef
Namespace
扩展AReference
Ref
扩展ARef
Var
扩展ARef
为什么在这里使用具体派生?
clojure.lang
中的类包含大量可变的私有字段。不要混淆语言的内部实现细节与其预期使用方式。 - Alexclojure.core
函数兼容的新数据结构的唯一方法是扩展clojure.lang
接口。如果该包中的所有内容确实只是实现细节,那么不应需要了解其工作方式就能进行此类扩展。 - Sam Estep