自宅のコンピューター (OSX) で (load-file) を使用しようとすると、次のエラーがスローされます。
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") の違いは何ですか? スラッシュを使用したパス構造以外は異なりますが、これが両方のシステムで機能しない理由がわかりません。
ところで:OS以外の両方のシステムは、clojure-1.5.1でJRE 1.7_025を実行しています。
更新: スタック トレースを求められましたが、これを行う方法がわかりません。Clojure を使い始めたばかりです。しかし、emacs nrepl-error buffer は私のためにこれをリストしました:
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ボックスでまったく同じ問題を抱えていましたが、元の答えは正しいことがわかりましたが、(load-file)に関係しているという私の仮定は正しくありませんでした。読み込んでいたファイルには、関数自体の一部としてベクトル [] を使用していない関数がありました。Clojure は正しいことをしていました (しかし、私はこれを完全に忘れていました)。私の機能はそうではなかったので、ファイルをロードしませんでした。LISP がこれを行うことと、これがバグではなく機能であることを忘れています (私が LISP を好きな理由)。
私は clojure は初めてですが、LISP は初めてなので、これに気付くべきでした。ファイルは私の研究ファイルです。REPL から再入力したすべての例を調査し、ファイルを最新のものでリロードして、正しく入力したことを確認します。最新の関数をファイルに追加したときに、間違って再入力し、ファイルを再ロードしてチェックしなかったようです。私が立ち去ってREPLを閉じ、夕食後に戻ってきてファイルをリロードしようとすると、ロードされませんでした。
時間の無駄で申し訳ありません。しかし、助けてくれてありがとう。元の答えは正しかったので、ファイル内のすべての関数を再チェックするのを忘れていました。