我经常想在另一个命名空间中运行一小段代码 - 例如可能是复制/粘贴的 DSL 代码片段,我想避免必须:
- 在我当前的命名空间声明中添加一堆
use
子句。这使得 ns 声明变得混乱,增加了额外的维护工作,有时还存在名称冲突的风险。 - 添加
require
子句并强制为所有内容添加名称空间限定符或别名。现在我的 DSL 代码更加混乱。
理想情况下,我希望能够执行以下操作:
(with-ns my.namespace
(foo bar baz))
其中foo
,bar
可能是 中的符号my.namespace
,但是baz
是当前(封闭)命名空间中的符号。因此,代码在类似于“本地”命名空间的东西中运行,它在其范围内“使用” my-namespace,但不会影响周围的命名空间。
有没有标准/更好的方法来做到这一点?或者这是一件疯狂的事情?