我在命名空间mwm中定义了我自己的defn。
我的新代码看起来像这样
(mwm/defn foo [x] ...)
只要它被称为defn2,一切都很好,但是在使用clojure.core / defn将其重命名为defn并引用原始defn之后,只有" lein uberjar"的工作原理。
当我运行" lein run"时,编译失败为
c:\data3\clojure\cdn77-purge>lein run
WARNING: defn already refers to: #'clojure.core/defn in namespace: mw.mwm, being
replaced by: #'mw.mwm/defn
Exception in thread "main" java.lang.ClassNotFoundException: mw.mw1, compiling:(
mw/mw1.clj:40:1)
at clojure.lang.Compiler.analyze(Compiler.java:6543)
at clojure.lang.Compiler.analyze(Compiler.java:6485)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3791)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6725)
可以在https://github.com/mattiasw2/cdn77-purge/tree/renamed_to_defn
找到该代码答案 0 :(得分:1)
您可以尝试在mw.mwm
命名空间中使用:refer-clojure
子句:
(ns mw.mwm
(:refer-clojure :exclude [defn])
(:require
[clojure.pprint :as pp]
[clojure.walk :as walk])
(:gen-class))
答案 1 :(得分:0)
我将自己定义的defn移动到一个单独的项目中,所以看起来你不能在使用它的同一个项目中重新定义defn。