我在Windows XP上使用Clojure 1.4.0(JVM = 1.6.0)。
我的help.clj
脚本包含我认为有用的Clojure代码的模糊片段。
在Clojure repl
中,我可以使用(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
我错过了什么?
答案 0 :(得分: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)
调用移至脚本的 end 。如果调用不在脚本的末尾,那么在评估脚本中的其余函数之前,Clojure会进入REPL,因此它们在REPL中不可用。由于clojure-help
是在之后在您的脚本中(p1)
调用后定义的,因此在退出REPL之后才会对其进行评估。
答案 1 :(得分: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