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

感谢您在上面的评论中发布代码!没有代码,就不可能知道实际发生了什么。进行一项简单的更改似乎可以解决问题:

(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 回答