2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!有关如何使用此平台的一些更多信息,请参阅 关于 页面。

0
REPL

我正在通过《Clojure Workshop》一书学习 Clojure,在这项练习上我遇到了难题已有几天了。

(我的 IDE 是 IntelliJ,并且在 Windows 上使用它).

练习 4.10:从 CSV 文件导入数据

1. 在您的计算机上创建一个方便的文件夹。

由于尝试了很多次,我决定创建一个全新的项目。

在 Leiningen 和 Deps 之间选择有什么区别?我大多数时候使用 Leiningen,但因为我将使用一个 deps.edn 文件,我应该使用 Deps 吗?

image

2. 将匹配分数文件 match_scores_1991-2016_UNINDEXED.csv 下载到您创建的文件夹中。(在 GitHub 上这里)

我应该在哪里下载这个文件?在项目文件夹内的 src 文件中,还是任何文件都可以?有区别吗?

我决定将其保存在 src 中。

print

3. 在同一文件夹中,使用编辑器创建一个包含以下内容的 deps.edn 文件

{:deps
 {org.clojure/data.csv {:mvn/version "0.1.4"}
  semantic-csv {:mvn/version "0.2.1-alpha1"}}}

因此,我创建了一个 deps.edn 文件。

deps.edn

4. 通过在 REPL 中评估以下表达式来验证一切是否正常

user> (require '[clojure.data.csv :as csv])
nil
user> (require '[clojure.java.io :as io])
nil
user> (with-open [r (io/reader "match_scores_1991-2016_unindexed_csv.csv")]
         (first (csv/read-csv r)))

在创建 REPL 时,我应该选择“使用 IntelliJ 项目的类路径运行”,对吗?

https://i.imgur.com/1ZTvirB.png

但是,在我准备评估测试表达式时,第二个和第三个表达式在评估时显示错误。

error

“clojure.data.csv :as csv”在评估时出现的错误如下

Execution error (FileNotFoundException) at csv-example.core/eval1549 (form-init2604783929697477049.clj:1).
Could not locate clojure/data/csv__init.class, clojure/data/csv.clj or clojure/data/csv.cljc on classpath.

我缺少什么?为解决这个问题已经尝试了好几天,但是我没有找到任何答案。

谢谢!

3 个回答

+1

selected
 
最佳答案

看起来没有找到data.csv依赖。我猜你是创建了一个leiningen项目(因为你的项目文件夹里有project.clj)。然后你创建了deps.edn文件,并将依赖项放在那里。默认情况下,leiningen不会检索deps.edn(但有插件可以允许这样做)。因此,当你从IDE运行项目时,我猜它使用了project.clj,其中没有data.csv依赖(可能是clojure)。

你可以尝试进入包含deps.edn的项目文件夹,在终端中运行clj,这应该会基于deps.edn文件的repl,并正确评估require

你还可以直接将data.csv的依赖项放入leiningen project.clj文件的:dependencies密钥中。另一种选择是让clj解析依赖项,但仍使用leiningen。如lein-tools-deps之类的插件就做这件事。

我个人建议坚持使用leiningen,或者在教程中推荐使用clj时,严格遵守。

感谢Tom!我通过添加以下项解决了问题

[org.clojure/data.csv   "1.0.0"]
[semantic-csv           "0.2.1-alpha1"]

到project.clj文件内的:dependencies键中。
0

无论使用哪种项目工具,我都建议按照以下方式将这些文件添加到项目中

csv_example/                    ;; project root
csv_example/deps.edn            ;; if using Deps
csv_example/project.clj         ;; if using Leiningen
csv_example/src                 ;; src root
csv_example/src/csv_example/core.clj
csv_example/match_scores_1991-2016_unindexed_csv.csv

问题#1 - 项目配置文件(deps.edn或project.clj)应始终位于根目录下(不在src目录下)。我认为,如果您将项目作为Deps或Leiningen项目导入(在这种情况下,您需要在项目根目录下有deps.edn或project.clj),那么IntelliJ类路径可能只能按预期工作。在所有这些情况下,如果工作正常,您应该在“外部库”下的项目结构树中看到clojure、data.csv和semantic-csv作为库。

问题#2 - 代码中的相对文件路径(如您的reader调用)将相对于当前目录解析(您的IDE默认为项目根目录,因此不要将其放在src目录下)。

感谢您的回答,Alex!
0

在StackOverflow上提问和回答:[https://stackoverflow.com/questions/65543714/problems-while-creating-a-deps-edn-file](https://stackoverflow.com/questions/65543714/problems-while-creating-a-deps-edn-file)(因此人们可以阅读一些关于问题的历史以及已经提出的建议)。

...