2011-01-04 6 views
6

私は、アプリケーションが起動されたときに一度初期化したい名前空間にdefを持っていますが、 "def"を含む名前空間が "使用"され、別の名前空間から再ロードされるたびに "def"が再評価されます。このリロード中に「def」が再抽出されないようにするにはどうすればよいですか?「def」をclojureにリロードしないようにするにはどうすればよいですか?

答えて

13

defonce名前空間がある場合、それはまだ再定義されるであろうけれども、あなたが近づきます:再読み込み(use 'my.namespace :reload)は、最初は、古いルート結合をスローしますので。

Defonceは、varが指定された名前空間にルートバインディングを既に持っているかどうかをチェックし、そうでない場合にのみ定義するマクロです。これを使用して、この特別なdefを独自の名前空間に入れて、(in-ns ...)とすることで、リロードによって抹消されないようにすることができます。 「メイン」ネームスペースを必要なだけ頻繁にリロードすることができ、コードは一度定義する必要があります。

+0

ねえ、この回答はこの動作以来変更されていますか?私は名前空間に(defonce x 5)を追加しようとしました。replを開始すると、xは5です。それからソースで変更しました(require:reload 'test)、(use:reload' test) 5 – Hendekagon

関連する問題