2011-01-10 13 views
14

mia dichiarazione dello spazio dei nomi REPL assomiglia a questo:Ottenere IllegalStateException quando ricarico uno spazio dei nomi nel

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

Funziona benissimo nel REPL, la prima volta che lo uso. Poi, quando modifico il codice e provare quanto segue nella REPL:

(use :reload 'test.foo) 

ottengo:

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

Sono su finestre con senso antiorario e anche provato con Leiningen (Lein repl).

risposta

9

Non si devono oscurare i nuclei fn per errore. Devi essere esplicito sul tuo intento:

(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

Grazie mille Christophe. Immagino che non potrei aspettarmi di meglio di un maestro Clojure che risponde alla mia domanda; o) – Damien

+1

Mentre questa risposta è ancora perfettamente valida, mi sono reso conto che l'uso di: require anziché: use risolve anche il mio problema, purché io usi sempre il prefisso specificato in: come chiamare le funzioni da altri namespace. Personalmente preferisco questa alternativa. – Damien

Problemi correlati