2011-01-10 13 views
14

My deklaracji przestrzeni nazw wygląda następująco:Pierwsze IllegalStateException podczas przeładunku nazw w REPL

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

To działa dobrze w REPL, po raz pierwszy go używać. Potem, kiedy zmodyfikować kod i spróbuj wykonać następujące czynności w REPL:

(use :reload 'test.foo) 

uzyskać:

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

jestem na oknach z zegara i również próbował z Leiningen (Lein repl).

Odpowiedz

9

Nie powinieneś cienia przypadkowo ukrywać. Musisz jasno powiedzieć o swoim zamiarze:

(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

Dziękuję bardzo Christophe. Sądzę, że nie mogłem oczekiwać czegoś lepszego niż mistrz Clojure odpowiadający na moje pytanie; o) – Damien

+1

Podczas gdy ta odpowiedź jest nadal całkowicie słuszna, zdałem sobie sprawę, że użycie: require zamiast: use również rozwiązuje mój problem, o ile zawsze używam prefiksu określona w: as wywoływanie funkcji z innych przestrzeni nazw. Osobiście wolę tę alternatywę. – Damien

Powiązane problemy