1

Windows XP (JVM=1.6.0) で Clojure 1.4.0 を使用しています。

私のhelp.cljスクリプトには、役に立つと思われる Clojure コードのスニペットが含まれています。

Clojurereplでは、現在のディレクトリから(load-file "help.clj").

ファンシーになろうとして、私は書き(defn clojure-help [] (load-file "help.clj"))ます。これで簡単(clojure-help)にロードできます。

次に、私が使用する起動スクリプトにclojure-help関数を入れてみました。repl

しかし、今呼び出す(clojure-help)と、次の例外が発生します。

CompilerException java.lang.RuntimeException: Unable to resolve symbol: clojure-help in this context

私は何が欠けていますか?

4

2 に答える 2

2

上記のコメントにコードを投稿していただきありがとうございます。コードがなければ、実際に何が起こっているのかを知ることは不可能です。簡単な変更を 1 つ行うだけで問題が解決するようです。

(defn my-prompt [] (printf "\n[%s]> " (ns-name *ns*)))

(defn p1 [] (clojure.main/repl :prompt my-prompt))

(defn clojure-help [] (load-file "help.clj"))

(p1)

変更により、(p1)呼び出しがスクリプトの最後に移動されました。呼び出しがスクリプトの最後にない場合、Clojure はスクリプト内の残りの関数を評価する前に REPL にドロップするため、REPL では使用できません。スクリプトの呼び出しclojure-helpに定義されたため、REPL を終了するまで評価されませんでした。(p1)

于 2012-08-12T03:45:07.800 に答える
1

repl を使用して他のスクリプトをロードしていない場合は、次のようにすることができます。

clojure --init replstartup.clj --repl

replstartup.clj にはクロージャーヘルプ関数が含まれます。

または、次のような clojure-repl.bat (またはそのようなもの) という名前のバッチ ファイルを作成することもできます。

@echo off
java -cp %userprofile%\clojure-1.4.0.jar clojure.main --init repl-startup.clj --repl
@echo on
于 2012-08-11T21:55:34.293 に答える