是否可以在clojure中将方法继承到不同的命名空间?

时间:2014-03-10 17:34:45

标签: clojure namespaces

我希望能够通过在其他位置包含一个命名空间来访问多个命名空间中的多个函数。

例如,假设我有vehicles.cljcar.cljbike.cljhandler.clj

我希望能够'继承'或在car.clj中包含bike.cljvehicles.clj的所有方法,这样我就可以userequire种车辆。 clj在我的handler.clj名称空间(或任何其他名称空间)中,并调用car和bike.cljs中的函数。

与C#中的父类和子类不同。这可能吗?

我需要这个的原因是因为我将许多功能分成不同的文件以保持关注点的分离,但我希望能够只包含主文件(例如,{{1}在任何其他命名空间/文件中调用vehicles.clj并调用所有这些类中的函数。

有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:5)

https://github.com/ztellman/potemkin有这样做的工具,但我强烈建议你不要这样做。这种事情很容易让代码变得非常难以理解,并且很容易将看似改进的组织变成意大利面条的噩梦。

请谨慎使用,但请注意,让自己更轻松并不总是意味着您正在改进代码!

答案 1 :(得分:0)

我可能会忽略你的观点,但听起来你正在描述一个实用程序库。我发现我的少量Clojure小程序都依赖于一个公共库。我使用leiningen new util来创建该项目。我的大多数applet都是用util构建的。它们都是常见的例程,如工具包。

不是来自Java但是来自C / C ++的Clojure,我发现需要一段时间才能习惯Clojure的命名,我同意这会使得持续工程变得复杂 - 即使你是维持者 - 更难