4
在Clojure中,某些任务(如实例化PersistentQueue
或使用deftype
实现与clojure.core
函数兼容的自定义数据类型)需要了解clojure.lang
中的类和/或接口。clojure.lang真的只是实现细节?
然而,根据clojure.lang/package.html
:
中唯一的类被认为是公共API的一部分是
clojure.lang.IFn
。所有其他类应被视为实施细节。
这些陈述是不正确的还是过时的?如果是这样,是否有计划在未来改正它们?如果没有,是否有更好的方式来执行上述任务,或者根本就不应该在惯用的Clojure代码中完成任务?
仅仅因为'clojure.lang'的成员被认为是实现细节并不意味着你不能引用它们。相反,它只是意味着你不应该期望这样的代码是可移植的(例如,你可能需要为Clojure和ClojureScript分开编写代码)。 – DaoWen
@DaoWen clojure.lang被认为是一个实现细节,不仅仅意味着代码不是可移植的。从最严格的意义上讲,只要公共接口保持不变,实现细节可以随时更改。然而'clojure.lang'并不是那么好战。 –