亚历克斯·米勒(Alex Miller)过去曾对此发表过评论(尽管整个帖子都值得一读):
我想说 Clojure 的内部存在一系列“公共”特性。
- 新的 Clojure API (clojure.java.api.Clojure) 是 Clojure 外部调用者的官方公共 API。这个 API 基本上由解析变量和调用函数的方法组成。
- 对于 Clojure 中的 Clojure 用户,几乎所有公开的、具有文档字符串并显示在 api 文档中的 var 都可以被视为公共 API。
- 私有的或没有文档字符串的 Clojure 变量(例如公共 api 文档中省略了该变量)可能是需要非常小心的地方。
- Clojure 内部 Java 接口 [
clojure.lang
] 当然是为了让库构建者创建在 Clojure 世界中使用的有用的东西。我不知道是否有人说过它们是“公开的”,但我当然认为对可能破坏外部用户的核心界面的任何更改都会被非常谨慎地考虑。
- Clojure 内部 Java 类 [
clojure.lang
] 在大多数情况下应被视为私有的,如有更改,恕不另行通知。甚至那里也有灰色地带。
一般来说,我们不会高度重视封装或隐藏内部结构。在大多数情况下,如果内部组件可能对高级用户做有趣的事情有用,那么它们是可用的,但需要注意的是,你做的事情越奇怪,你就越有可能在未来的版本中被意外破坏。