【发布时间】:2016-02-04 09:36:38
【问题描述】:
我正在尝试执行以下操作:
(ns ns-test.core
(:use [ns-test.a :as a]
[ns-test.b :as b]))
(def test-map {:key "a"})
(defmulti print-ns :key)
(defmethod print-ns "a" [input-map]
(a/foo input-map))
(defmethod print-ns "b" [input-map]
(b/foo input-map))
名称空间 a 和 b 如下所示:
(ns ns-test.a)
(defn foo [x]
(println x "I'm in namespace A."))
和
(ns ns-test.b)
(defn foo [x]
(println x "I'm in namespace B."))
但是当我尝试将这些类加载到 REPL 中时,我得到了这个:
user=> (use 'ns-test.core :reload)
CompilerException java.lang.IllegalStateException: foo already refers to: #'ns-test.a/foo in namespace: ns-test.core, compiling:(ns_test/core.clj:1:1)
为什么存在 a/foo 和 b/foo 之间的这种冲突,我该如何防止呢? (命名空间和命名空间限定的重点不就是允许我拥有两个同名的不同功能吗?)
【问题讨论】:
标签: clojure namespaces read-eval-print-loop