请在2024 Clojure 调查问卷!中分享您的想法。

欢迎!请查看关于页面以了解更多有关此页面如何工作的信息。

0
REPL

我正在通过《The Clojure Workshop - Packt》这本书学习 Clojure,但在这次练习中我已经卡了好几天。

(我的 IDE 是 IntelliJ,我使用的是 Windows)。

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

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

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

在这里选择 Leiningen 或 Deps 有区别吗?我通常使用 Leiningen,但我应该使用 Deps,因为我将使用 deps.edn 文件吗?

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 中评估以下表达式来验证 everything 是否正常工作

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

但当我准备评估测试表达式时,它 evaluations 第二个和第三个表达式时出现错误

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

选择了
 
最佳答案

看起来没有检测到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项目.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 项目导入的情况下,IntelliJ 的类路径才能按预期工作(在这种情况下,您需要在项目根目录下有 deps.edn 或 project.clj)。在这些情况下,如果工作正常,您应该在“外部库”下的项目树中看到 clojure、data.csv 和 semantic-csv 作为库。

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

Jan 7, 2021 by
感谢您的回答,Alex!
0
by

在 StackOverflow 上提问和回答:[创建 deps.edn 文件时出现的问题](https://stackoverflow.com/questions/65543714/problems-while-creating-a-deps-edn-file)(因此人们可以了解该问题的历史以及已提出的建议)。

...