0

我正在使用 Leiningen 1.7.1 和 Clojure 1.3.0。我的问题是 :aot 编译器指令与指示我的 def 不是动态的错误消息之间的关系(如果有)是什么?

以下是详细信息:

如果我从我的任何 project.clj 文件(两个库和一个依赖于它们的主库)中删除 :aot 指令,我会收到警告:分隔符未声明为动态的,因此不可动态重新绑定。

如果我修改这样的语句

(def bene-ssn-idx 16)
(def gic-ssn-idx 2)

包括动态指令,我得到这个运行时错误

线程“主”java.lang.IllegalStateException 中的异常:无法动态绑定非动态变量:clojure-csv.core/ strict

有一次我记得听说 Clojure 1.3 中有一个关于第一条警告消息的问题,并且它将被修复。

由于:aot,我很高兴能忍受更长的构建,但我仍然想知道警告和错误的含义,以及为什么删除:aot会产生警告。

4

1 回答 1

2

您正在使用不符合 Clojure 1.3 的 clojure-csv 版本:它的耳罩变量未声明为动态的。我不知道有关使用提前编译如何防止该问题的详细信息。

于 2012-04-10T18:20:45.887 回答