2

也许我错过了一些东西或者只是阅读过时的信息。基本上,我在这里尝试使用 CSV 库。

我已将其包含在我的 project.clj 中...

:dependencies [[org.clojure/clojure "1.3.0"]
               [org.clojure/data.csv "0.1.2"]]

...并使用 Leiningen 成功检索了库。现在,将这个库包含在我的程序中使用的正确方法是什么?我尝试了发布在 lib 的 Github 页面上的示例,但得到一个错误说明:

FileNotFoundException Could not locate clojure/data/csv__init.class or clojure/data/csv.clj on classpath:   clojure.lang.RT.load (RT.java:430)

编辑:进一步澄清我的尝试:我将代码粘贴在我的命名空间声明下,如下所示:

(ns testprogram.core(:gen-class))
(require '[clojure.data.csv :as csv]
         '[clojure.java.io :as io])

在 REPL 中尝试会产生相同的结果。我很确定我试图“包含”它们是错误的。

4

2 回答 2

1

您可以尝试以下操作:注意 :require 嵌套在 ns 声明中。这是这样做的首选方式。

(ns testprogram.core(:gen-class)
(:require [clojure.data.csv :as csv]
          [clojure.java.io :as io]))

我认为在您的情况下,您可以使其与以下内容一起使用(未经测试)

(ns testprogram.core(:gen-class))
(require '(clojure.data [csv :as csv])
         '(clojure.java [io :as io]))

请参阅以下说明

http://clojure.github.com/clojure/clojure.coreapi.html#clojure.core/require

于 2012-08-31T04:25:39.497 回答
1

这个测试对我有用:

(ns test.csv-test
  (:gen-class)
  (:require [clojure.data.csv :as csv]
            [clojure.java.io :as io]))

(defn main- [args]
(csv/read-csv "test"))

我在测试时也遇到了“FileNotFound:找不到”问题。这是我project.clj文件中的一个简单错字。我建议仔细检查。

注意:这也有效:

(require '[clojure.data.csv :as csv]
         '[clojure.java.io :as io])
(defn main- [args]
(csv/read-csv "test"))

虽然:require在宏中使用指令ns当然是最佳实践,但这并不是问题的根源。

在这两个版本中,REPL 输出:

user=> (in-ns 'test.csv-test)
#<Namespace test.csv-test>
test.csv-test=> (main- [])
(["test"])

还测试了lein runjava -cp <uberjar> test.csv_test

于 2012-08-31T04:40:35.687 回答