【问题标题】:Define new macro "defn", lein uberjar succeeds, lein run fails to compile定义新宏“defn”,lein uberjar 成功,lein run 编译失败
【发布时间】:2016-02-12 11:09:18
【问题描述】:

我在命名空间 mwm 中定义了自己的 defn。

我的新代码如下所示

(mwm/defn foo [x] ...)

只要它被称为 defn2 一切都很好,但是在将其重命名为 defn 并使用 clojure.core/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找到

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    我将自己对 defn 的定义移到了一个单独的项目中,因此您似乎无法在使用它的同一个项目中重新定义 defn。

    【讨论】:

      【解决方案2】:

      您可以尝试在 mw.mwm 命名空间中使用 :refer-clojure 子句:

      (ns mw.mwm
        (:refer-clojure :exclude [defn])
        (:require
          [clojure.pprint :as pp]
          [clojure.walk :as walk])
        (:gen-class))
      

      【讨论】:

      • 谢谢,但没用。不知何故,我需要确保 lein 在编译其他文件之前生成类 mw.mwm。
      猜你喜欢
      • 2016-06-06
      • 2017-08-18
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      相关资源
      最近更新 更多