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

已选中
 
最佳答案

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

你可以在终端中转到包含 deps.edn 的项目文件夹,并运行 clj,这将从此文件提供一个 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 项目导入时,IntelliJ 的类路径才能按照预期工作(在这种情况下,您需要在项目根目录下有一个 deps.edn 或 project.clj 文件)。在所有这些情况下,如果一切正常,您应该会看到 clojure、data.csv 和 semantic-csv 在“外部库”下的项目树中表示为库。

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

谢谢你的回答,Alex!
0

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

...