Refactoring Clojure function out of file
鉴于每个Clojure命名空间都与一个文件相对应,是不是在不破坏向后兼容性的情况下,一个公共函数,宏等永远不能移出该文件的情况?
这似乎是一个非常严格的系统-本质上,面向公众的代码的重构只能在单个文件中完成。
存在此限制的技术原因吗?
与Java互操作有关吗?
不被视为公共api一部分的功能可以标记为私有,这为以后的重构提供了机会,而又不会破坏调用代码。当然,对公共api进行的任何更改都可能会破坏向后兼容性,并且在该重大更改与引入具有冗余功能的新api之间进行权衡。
1 2 3 4 5 6 7 | (ns foo) ;; only visible in the foo ns (defn- a-private-fn [] ...) ;; only visible in the foo ns (def ^:private a-private-var BAR 1) |
您可以将单个名称空间拆分为多个文件(请参阅在多个文件上拆分Clojure名称空间),但这很少见。另外,您也可以使用https://github.com/ztellman/potemkin导入变量,但实际上很少这样做。 Clojure库倾向于具有相对较小的公共接口,这可能是因为它们通常在通用数据结构上运行。因此,很少有文件中包含很多代码。
如果要保留向后兼容性,可以将var