別の名前空間でコードの小さなスニペットを実行したいことがよくあります。たとえば、DSL コードのコピー/貼り付けスニペットなどです。次のいずれかを行う必要はありません。
use
現在の名前空間宣言に一連の句を追加します。これにより、ns 宣言が乱雑になり、余分なメンテナンス作業が追加され、名前の衝突のリスクが生じることがあります。- 句を追加
require
し、すべてに名前空間修飾子またはエイリアスを追加することを余儀なくされます。今、私の DSL コードはずっと厄介です。
理想的には、次のようなことができるようにしたいと思います。
(with-ns my.namespace
(foo bar baz))
は、 内のシンボルfoo
であるbar
可能性がありますmy.namespace
がbaz
、現在の (囲んでいる) 名前空間のシンボルです。したがって、コードは、そのスコープ内で my-namespace を「使用」する「ローカル」名前空間のようなもので実行されますが、それ以外の場合は周囲の名前空間には影響しません。
これを行うための標準/より良い方法はありますか? それとも、これはクレイジーなことですか?