我正在使用Leiningen 1.7.1和Clojure 1.3.0。我的问题是,如果有的话,:aot 编译器指令和指示我的 defs 的错误消息之间的关系是什么不是动态的?
以下是详细信息:
如果我从任何 project.clj 文件(两个库和一个依赖于它们的 main 文件)中删除 :aot 指令,我会收到警告:分隔符未声明为动态,因此不可动态重新绑定。
如果我修改这样的语句
(def bene-ssn-idx 16)
(def gic-ssn-idx 2)
包含动态指令,我收到此运行时错误
线程"main"中的异常 java.lang.IllegalStateException: 无法动态绑定非动态变量: clojure-csv.core/strict
我记得有一次我听说 Clojure 1.3 中有一个关于第一个警告消息的问题,并且它将被修复。
由于 :aot,我非常高兴能忍受更长的构建,但我仍然想知道警告和错误的含义,以及删除 :AOT 产生警告的原因。
您正在使用的 clojure-csv 版本不符合 Clojure 1.3 标准:其耳罩 var 未声明为动态。我不知道如何使用提前编译来防止这个问题的细节。