【发布时间】:2012-12-06 21:22:00
【问题描述】:
我经常想在另一个命名空间中运行一小段 sn-p 代码 - 例如,可能是 DSL 代码的复制/粘贴 sn-p 代码,我希望避免这样做:
- 在我当前的命名空间声明中添加一堆
use子句。这使 ns 声明变得混乱,增加了额外的维护工作,有时还存在名称冲突的风险。 - 添加
require子句并强制为所有内容添加命名空间限定符或别名。现在我的 DSL 代码更加混乱了。
理想情况下,我希望能够执行以下操作:
(with-ns my.namespace
(foo bar baz))
其中foo、bar 可能是my.namespace 中的符号,但baz 是当前(封闭)命名空间中的符号。所以代码运行在类似于“本地”命名空间的东西中,它在其范围内“使用”my-namespace,但不会影响周围的命名空间。
有没有标准/更好的方法来做到这一点?或者这是一件很疯狂的事情?
【问题讨论】:
-
我使用 load-file 来获得这个,这是一个 hack :-/ 所以你不是唯一的,但它仍然可能很疯狂。
-
@Arthur - 嗯,看看它是如何工作的,但 sn-p 通常不在一个自包含的文件中,当我们不需要时,这似乎是对文件系统的滥用。很高兴在 Conj BTW 见到你!
-
这是有限制的,因为 DSL 使用(在我的情况下,network+vm 定义需要每个文件一个,所以这不是一个好的答案。见到你也很酷:)
标签: clojure namespaces