10

我在第二天尝试使用clojure,但我几乎什么都不懂。我正在使用 Programming Clojure 第二版。我被图书馆困住了。

我有 Leiningen 并且正在运行 REPL。本书首先告诉读者运行一个简单的

(require 'clojure.java.io)

效果很好(我得到一个零)。然后它想通过运行另一个简单的文件来加载一个名为 Introduction.clj 的文件

(require 'examples.introduction)

我在哪里收到错误消息

FileNotFoundException Could not locate clojure/java/introduction__init.class
or clojure/java/introduction.clj on classpath:   clojure.lang.RT.load (RT.java:432)

我下载了 Introduction.clj 文件并查看了我应该把它放在哪里。该错误和书中说该命令将在我的类路径中搜索,但我不知道那是在哪里或是什么(在搜索和阅读 1 小时后我仍然不明白,抱歉)。我运行了一些命令,列出了许多类路径(其中没有一个包含 clojure/java/io.clj)。

所以我尝试了另一种方法 - 在我的磁盘上找到 io.clj 文件,然后简单地将文件复制到那里并使用命令运行它

(require 'clojure.java.introduction)

这似乎也不起作用。顺便说一句,我找到的 io.clj 文件位于“C:\Program Files\clojure\src\clj\clojure\java”中。我尝试从 java 文件夹以及 clojure 文件夹中运行其他几个 .clj 文件,例如 javadoc.clj 或 inspector.clj ,并且似乎都可以使用上述命令正常工作。只有新文件似乎没有以这种方式加载。

任何帮助表示赞赏:)

4

2 回答 2

6

Clojure 在 Java 虚拟机上运行,​​因此您需要了解一些关于 PATH 和 CLASSPATH 概念的知识:

请参阅:http ://docs.oracle.com/javase/tutorial/essential/environment/paths.html

关于错误消息,Clojure 运行时期望introduction.clj在目录中找到clojure\java\example\introduction.clj(而不是它真正应该在的位置 - 见下文)。

Clojure 命名空间的约定是最后一个组件是文件名,而任何前面的组件都是父目录。所以

clojure.java.introduction

必须在目录中(相对于您的源“根”或类路径)

clojure\java\introduction.clj

(lein REPL 会自动将您的源根目录添加到类路径中)。

您需要了解的另一个概念是源代码的“根”所在的位置。对于 Leiningen(您正在使用的构建工具),默认值为“src”或“src/main/clojure” - 如GitHub 上的 Leiningen 示例项目文件中所述)。

最后,如果你真的卡住了,这本书的完整项目似乎可以在 GitHub 上找到

查看项目,我发现您实际上应该将文件放在src\examples\introduction.clj

于 2012-09-21T14:23:25.650 回答
1

你在读《Programming Clojure》这本书吗?

我遇到了同样的问题。禁止如下:

  1. 如果用java启动clojure:我在windows下工作,clojure.jar放在D:\backup\clojure-1.5.1,《Programming Clojure》一书的源码放在D:\study\clojure \shcloj-代码\代码。您应该首先删除文件夹 D:\study\clojure\shcloj-code\code 中的 user.clj 文件。

java -cp d:\backup\clojure-1.5.1\clojure-1.5.1.jar;d:\study\clojure\shcloj-code\code clojure.main -r

如果您在 linux 中工作,请替换“;” 和 ”:”

  1. 如果你通过 lein 启动 clojure 你应该先 cd 到 D:\study\clojure\shcloj-code\code 文件夹,然后

莱因雷普

您还应该删除文件夹 D:\study\clojure\shcloj-code\code 中的 user.clj 文件。

于 2014-02-04T14:10:32.587 回答