我正在学习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
我想我明白为什么,但我该如何解决这个问题?感谢这个网站和它的所有大师!
谢谢。
如果您实际上只使用其中一个$
函数,那么您可以排除另一个函数
(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]]))
或者你可以采取显式命名要在命名空间中引用的 var 并通过 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]]))
现代 clojure 代码不鼓励使用其他命名空间use
方法,并且已被包含在引用表单中,因此我在这些示例中使用该形式。还强烈建议将引用表单放在命名空间声明中。