【发布时间】:2015-11-18 20:04:15
【问题描述】:
在documentation of Clojure's type mechanisms中声明
- 具体推导不好
- 不能从具体类派生数据类型,只能从接口派生
但是,一些core Clojure classes 使用具体派生(还有其他示例,但这些是超类是clojure.lang 一部分的唯一情况):
-
ARef扩展AReference -
Agent扩展ARef -
Atom扩展ARef -
Namespace扩展AReference -
Ref扩展ARef -
Var扩展ARef
此外,还有很多个抽象类。但是,没有办法在 Clojure 中创建等效的抽象类,而且对我来说,抽象类的扩展似乎与常规的具体派生具有所有相同的缺点。
为什么在这里使用具体的推导?
【问题讨论】:
-
同一页面还警告不要进行可变性和封装,但
clojure.lang中的类包含大量可变的私有字段。不要将语言的内部实现细节与它的用途混淆。 -
@Alex 我关心的唯一原因是
clojure.lang中的接口扩展是在 Clojure 中实现与clojure.core。如果该包中的所有内容都只是实现细节,那么此类扩展不需要了解其工作原理。
标签: inheritance clojure