在Clojure中重命名命名空间

在Clojure中重命名命名空间,clojure,Clojure,是否可以重命名已加载的命名空间 在我的例子中,我使用了带有名称空间的Clojure脚本,比如说main xxx,以及许多其他脚本,它们使用main名称空间(不可能修改它们,main和main xxx名称空间具有相同的功能,但实现不同) 我想做的是做一些类似于(别名'main'main xxx)-但为了让它工作,我必须在每个脚本中调用别名(这是无法完成的) 有什么想法吗?它不会按你想要的方式工作。可以在每个名称空间中调用别名(只需在每个名称空间中调用别名),但别名不会影响在别名之前定义的函数—它们

是否可以重命名已加载的命名空间

在我的例子中,我使用了带有名称空间的Clojure脚本,比如说
main xxx
,以及许多其他脚本,它们使用
main
名称空间(不可能修改它们,
main
main xxx
名称空间具有相同的功能,但实现不同)

我想做的是做一些类似于
(别名'main'main xxx)
-但为了让它工作,我必须在每个脚本中调用
别名
(这是无法完成的)


有什么想法吗?

它不会按你想要的方式工作。可以在每个名称空间中调用别名(只需在每个名称空间中调用别名),但别名不会影响在别名之前定义的函数—它们的绑定已经引用了原始名称空间的变量。实际上,您需要重新定义名称空间的变量,以便更改通过它们调用的函数。

我不知道名称空间是否可以重命名,如果可以,我认为这是一个坏主意。您可以使用ns中的
unalias
alias
来更改无法编辑的ns中的命名空间映射,但这仍然是一个比创建命名空间新版本(即使无法编辑,也可以手动创建可编辑的修改版本)更差的解决方案,我需要的是“全局”或“继承”别名。但是,如果我理解正确的话,Clojure中没有这样的东西。实际上,我认为你可以使用协议来获得你想要的东西-如果代码是按照某个协议的功能编写的,那么客户端可以随意交换该协议的实现。