当我在探索 Clojure 时,一个问题困扰了我很长一段时间。我尝试通过compile
在 Clojure 脚本上调用 REPL 中的函数来生成一个类,如下所示:
(ns mylib.DirLister (:gen-class))
(defn -listDir [this path]
(->> path java.io.File. .listFiles (map #(.getName %))))
我将此脚本保存到e:/temp/clj/src/mylib/DirLister.clj。当我为选项指定相对路径-cp
时,以下会话运行良好,即在类路径中成功生成类:
e:\temp\clj>java -cp .\src;.\classes;d:/tools/clojure-1.4.0/clojure-1.4.0.jar clojure.main
Clojure 1.4.0
user=> (compile 'mylib.DirLister)
mylib.DirLister
user=>
但是当我使用绝对路径时,会提示“没有这样的文件或目录”错误:
e:\>java -cp e:/temp/clj/src;e:/temp/clj/classes;d:/tools/clojure-1.4.0/clojure-1.4.0.jar clojure.main
Clojure 1.4.0
user=> (compile 'mylib.DirLister)
CompilerException java.io.IOException: No such file or directory, compiling:(mylib/DirLister.clj:1)
user=>
怎么会 ?我的意思是为什么绝对路径不起作用但相对路径起作用。
我知道我可以和莱宁根一起去。但是由于我正在学习 Clojure,所以在采用这个功能齐全的工具之前,我想了解一下下面的内容。