2

多分私は何かを見逃しているか、古い情報を読んでいるだけです. 基本的には、CSV lib hereを使用しようとしています。

私はそれを私のproject.cljに含めました...

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

...そして、ライニンゲンを使用してライブラリを正常に取得しました。さて、私のプログラムで使用するためにこのライブラリを含める適切な方法は何でしょうか? 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

このテストは私のために働いた:

(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 runまた、と でテスト済みjava -cp <uberjar> test.csv_test

于 2012-08-31T04:40:35.687 に答える
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 に答える