1

私はClojureを学んでいます - とても楽しいです! 同じファイルで Incanter と Clojure Soup を使用しようとしています。

(require '[jsoup.soup :as soup])
(use '(incanter core stats io charts datasets))

そして、次のエラーが表示されます。

CompilerException java.lang.IllegalStateException: $ already refers to: #'jsoup.soup/$ in namespace: user, compiling

理由は理解できたと思いますが、どうすればこの問題を解決できますか? このウェブサイトとそのすべての達人に感謝します!

ありがとう。

4

1 に答える 1

3

実際に関数の1つだけを使用する場合は$、他の関数を除外できます

(ns myproject.example
   (:require [jsoup.soup :as soup]
             [incanter [core :refer :all :exclude [$]]
                       [stats :refer :all] 
                       [io :refer :all] 
                       [charts :refer :all] 
                       [datasets :refer :all]]))

または、名前空間で参照する変数に明示的に名前を付け、他の変数を明示的に呼び出すアプローチを取ることもできますnamespace-alias/function。これは次のようになります。

(ns myproject.example
   (:require [jsoup.soup :as soup]
             [incanter [core :refer [$ ... and others here ...] 
                             :as incanter]
                       [stats :as stats] 
                       [io :as io] 
                       [charts :as charts] 
                       [datasets :as dataset]]))

他のuse名前空間を使用する方法は、最近の clojure コードでは推奨されておらず、refer フォームに組み込まれているため、これらの例ではそのフォームを使用しています。また、参照フォームを名前空間宣言に入れることを強くお勧めします。

于 2015-02-02T07:53:54.393 に答える