每當我嘗試使用(加載文件)我家的電腦(OSX)它引發以下錯誤的:的Clojure(加載文件)給出了一個錯誤
IllegalArgumentException Parameter declaration comp should be a vector clojure.core/assert-valid-fdecl (core.clj:6732)
當我加載相同的文件在我的Windows盒子上工作。 (load-file「C:\ clojure \ pc-3.clj」)和(load-file「/Users/myname/clojure/pc-3.clj」)之間的區別是拋出錯誤。除了斜線的路徑結構不同,但我不明白爲什麼這不適用於我的兩個系統。
BTW:除了OS以外,兩個系統都運行JRE 1.7_025和clojure-1.5.1。
更新: 我被問到一個堆棧跟蹤,我不知道如何做到這一點,剛開始使用Clojure。但是emacs的nrepl錯誤緩衝中列出了這一點對我來說:
java.lang.ClassCastException: clojure.lang.PersistentVector cannot be cast to java.lang.String RT.java:318 clojure.lang.RT$3.invoke NO_SOURCE_FILE:1 user/eval278 Compiler.java:6619 clojure.lang.Compiler.eval Compiler.java:6582 clojure.lang.Compiler.eval core.clj:2852 clojure.core/eval main.clj:259 clojure.main/repl[fn] main.clj:259 clojure.main/repl[fn] main.clj:277 clojure.main/repl[fn] main.clj:277 clojure.main/repl RestFn.java:1096 clojure.lang.RestFn.invoke interruptible_eval.clj:56 clojure.tools.nrepl.middleware.interruptible-eval/evaluate[fn] AFn.java:159 clojure.lang.AFn.applyToHelper AFn.java:151 clojure.lang.AFn.applyTo core.clj:617 clojure.core/apply core.clj:1788 clojure.core/with-bindings* RestFn.java:425 clojure.lang.RestFn.invoke interruptible_eval.clj:41 clojure.tools.nrepl.middleware.interruptible-eval/evaluate interruptible_eval.clj:171 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval[fn] core.clj:2330 clojure.core/comp[fn] interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn] AFn.java:24 clojure.lang.AFn.run ThreadPoolExecutor.java:1145 java.util.concurrent.ThreadPoolExecutor.runWorker ThreadPoolExecutor.java:615 java.util.concurrent.ThreadPoolExecutor$Worker.run Thread.java:724 java.lang.Thread.run
更新:找到了今天的問題了。我的Windows盒子裏出現了完全相同的問題,原來的答案是正確的,但是我認爲它與(加載文件)有關的假設是錯誤的。我正在加載的文件有一個函數沒有使用vector []作爲函數本身的一部分。在加載文件時檢查語法以確保文件中的所有內容都完整,Clojure正在做正確的事情(但我完全忘記了這一點)。我的功能不是這樣,它不會加載文件。我忘記了LISP這樣做,並且它是一個功能而不是bug(我喜歡LISP的原因)。
我是clojure的新手,但不是LISP,我應該意識到這一點。該文件是我的學習文件。我從REPL重新輸入的所有例子,爲什麼要學習和用最新的文件重新加載文件,以確保我輸入正確。看來,當我添加最新的函數文件我重新輸入它不正確,並沒有重新加載文件來檢查它。當我離開並關閉REPL,然後在晚飯後回來,並嘗試重新加載文件時,無法加載。
非常抱歉浪費時間。但感謝您的幫助,並且很快。原來的答案是正確的我忘了重新檢查文件中的所有功能。
什麼版本的Clojure(所以我可以看看正確的線6732) –
可以包含更多的堆棧跟蹤嗎?所以我可以看到這是運行編譯器的問題還是編譯器在文件中檢測到的問題。 –
這就是所有打印的 – macshaggy