2

当我在探索 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,所以在采用这个功能齐全的工具之前,我想了解一下下面的内容。

4

2 回答 2

2

在我看来,您在命令行上混合使用了正斜杠和反斜杠。我不确定您使用的是什么外壳以及是否会有所作为。但是,带有 e: 的路径通常需要一个反斜杠“\”。也许这会有所帮助,或者至少消除一个潜在的问题来源?

您能否尝试更改第二个示例以使用

e:\temp\clj\src;e:\temp\clj\classes;d:\tools\clojure-1.4.0\clojure-1.4.0.jar

看看这是否有帮助?

于 2013-04-07T16:50:26.047 回答
1

最后我得到了答案:

compile函数将始终使用内置变量的值*compile-path*作为输出类的路径,如果您没有另外设置,则默认为当前目录下的“类”。所以我遇到的问题实际上并不是相对路径或绝对路径,而是当前目录和*compile-path*.

请参阅ClojureDoc

于 2013-04-16T14:24:29.480 回答