2011-01-10 6 views
14

私の名前空間宣言に名前空間を再ロードする場合はIllegalStateExceptionを取得すると、次のようになります。はREPL

(ns test.foo 
    (:use 
    [clj-http.client :only (get) :as client] 
    [net.cgrand.enlive-html :only (select) :as html])) 

それはREPL、私はそれを初めて使用するときに正常に動作します。その後、私はコードを変更し、REPLに次のようにしようとすると:

(use :reload 'test.foo) 

を私が手:

java.lang.IllegalStateException: get already refers to: #'clj-http.client/get in namespace: test.foo (foo.clj:1) 

私は反時計回りと窓の上だともLeiningenをしてみました(レインREPL)。

答えて

9

あなたは事故によってコアFNSをシャドウべきではありません。あなたの意図について明示する必要があります:

(ns test.foo 
    (:refer-clojure :exclude [get]) ; suppress the shadowing warning 
    (:require [clojure.core :as core]) ; allow to still reach clojure.core/get through core/get 
    (:use 
    [clj-http.client :only (get) :as client] 
    [net.cgrand.enlive-html :only (select) :as html])) 
+0

ありがとう、Christophe。 o) – Damien

+1

この回答はまだ完全に有効ですが、代わりに:requireの代わりにrequireを使うと、私は常に接頭辞を使用している限り、私の問題を解決します。 :で指定されているように、他の名前空間から関数を呼び出す。私は個人的にこの選択肢を好む。 – Damien