【发布时间】:2016-02-24 01:02:44
【问题描述】:
在 Clojure 中,某些任务(例如实例化 PersistentQueue 或使用 deftype 来实现与 clojure.core 函数兼容的自定义数据类型)需要了解 clojure.lang 中的类和/或接口.
但是,根据clojure.lang/package.html:
唯一被视为公共 API 一部分的类是
clojure.lang.IFn。所有其他类都应该被视为实现细节。
这些陈述是错误的还是过时的?如果是这样,是否有计划在未来纠正它们?如果没有,是否有更优选的方式来执行上述任务,或者根本不应该在惯用的 Clojure 代码中完成?
【问题讨论】:
-
clojure.lang的成员被视为实现细节并不意味着您不能引用它们。相反,它只是意味着你不应该期望这样的代码是可移植的(例如,你可能需要 Clojure 和 ClojureScript 的单独代码)。 -
@DaoWen
clojure.lang被视为实现细节意味着不仅仅是代码不可移植。从最严格的意义上讲,只要公共接口保持不变,实现细节就可以随时更改。不过clojure.lang并没有那么激进。
标签: clojure implementation leaky-abstraction