我正在阅读Clojure的欢乐书,并在Ch。中遇到了以下一系列错误。 2:
(def make-list0 #(list))
=> (var cursive-test.core/make-list0)
(make-list0)
IllegalStateException Attempting to call unbound fn: #'cursive-test.core/list clojure.lang.Var$Unbound.throwArity (Var.java:43)
(def make-list2 #(list %1 %2))
=> (var cursive-test.core/make-list2)
(make-list2 1 2)
IllegalStateException Attempting to call unbound fn: #'cursive-test.core/list clojure.lang.Var$Unbound.throwArity (Var.java:43)
(def make-list2+ #(list %1 %2 %&))
=> (var cursive-test.core/make-list2+)
(make-list2+ 1 2 3 4 5)
IllegalStateException Attempting to call unbound fn: #'cursive-test.core/list clojure.lang.Var$Unbound.throwArity (Var.java:43)
我不确定这里发生了什么。我正在使用IntelliJ IDEA和Cursive插件。有什么想法吗?
答案 0 :(得分:2)
不知何故,你不小心在自己的命名空间中定义了一个名为list
的东西,但没有给它一个值。你可能意外地做到这一点的一种方法是在函数内部使用def
,但实际上从不调用该函数:
(defn foo [x]
(def list x))
解决方案是不这样做,恢复正常的最简单方法是重新启动repl并重新加载命名空间,一旦它不再对list
进行错误的重新定义。如果找不到您定义它的位置,请注意重新加载命名空间也应该打印一条警告消息,告诉您重新定义list
,我认为包含一个行号,但我不记得了。