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

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

0
REPL

我在通过《The Clojure Workshop - Packt》这本书学习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
 
最佳答案






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 目录下)。

by
感谢您的回答 Alex!
0
by

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

...