我經常想在另一個命名空間中運行一小段代碼 - 例如可能是複製/粘貼的DSL代碼片段,並且我想避免必須:運行來自不同命名空間的嵌入代碼
- 將一堆
use
子句添加到我當前的名稱空間聲明中。這使得ns申報變得凌亂,增加了額外的維護工作,有時還會冒名稱衝突的風險。 - 添加
require
子句並被迫爲所有內容添加名稱空間限定符或別名。現在我的DSL代碼更加混亂。
理想我寧願能夠做這樣的事情:
(with-ns my.namespace
(foo bar baz))
凡foo
,bar
可能是符號內my.namespace
,但baz
在當前(封閉)命名空間的象徵。所以代碼運行時會像「本地」命名空間那樣在其作用域內「使用」my-namespace,但不會影響周圍的命名空間。
有沒有一個標準/更好的方法來做到這一點?或者這是一個想要做的瘋狂事情?
我使用負載文件排序得到這個,這是一個黑客: - /所以你不唯一的一個,它可能仍然是瘋狂的。 –
@Arthur - 嗯,看看如何工作,但往往這段代碼不是在一個自包含的文件,也似乎是當我們不需要的時候濫用文件系統。很高興在Conj BTW見到你! – mikera
這是限制,因爲DSL使用(在我的情況下網絡+虛擬機的定義需要爲每個文件一個,所以這不是一個好的答案。很高興見到你以及:) –