我遇到了 (:refer-clojure :exclude [read])
的问题 . 我的设置如下:
我有一个文件 foo.clj
,它是:
(ns foo.core)
(load "foo_bar")
然后我有一个文件 bar.clj
,它是:
(ns foo.core
(:refer-clojure :exclude [read]))
(defn read [])
在我的应用程序中,我确实在多个文件中拆分了命名空间 . 这就是为什么我在 foo.clj
文件中有一系列 (load)
语句,这是一个入口点 .
问题是,当我编译这个文件时,我仍然得到一个着名的错误:
警告:read已经引用:#'clojure.core /在命名空间中读取:clj-osf.crud,替换为:#'clj-osf.crud / read
我没有编译并告诉我 foo.core/read
根本就不存在 .
我还试图改变 foo.clj
:
(ns foo.core
(:refer-clojure :exclude [read]))
(load "foo_bar")
但同样的问题也会发生 . 这是Clojure中的错误,还是我错过了什么?
我正在使用Clojure 1.6
1 回答
它似乎与您使用的ns'es匹配您的文件名 . 我不确定这只是草率的例子还是实际上是问题 .
通常,当您跨文件拆分命名空间时,加载的文件应以
(in-ns 'foo.core)
开头,而不是(ns foo.core)
. clojure.pprint是核心的一个很好的例子(它加载了一堆子文件) .一个更全面的例子:
富/ core.clj:
富/ bar.clj:
如果我然后开始一个repl: