【问题标题】:Clojure - same function name different namespaceClojure - 相同的函数名称不同的命名空间
【发布时间】: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


    【解决方案1】:

    您可能想要:require 命名空间ab 而不是:use:use 将命名空间符号实习生到当前命名空间,因此冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      相关资源
      最近更新 更多