大多数Clojure库不仅提供有关放入project.clj
文件的内容的信息,还提供有关如何require
源文件中的库的信息。例如,https://github.com/clojure/data.json提供 Usage 部分:
(ns example
(:require [clojure.data.json :as json]))
我想使用Clojars库(它是一个Java库),它在Clojars上列出:https://clojars.org/zololabs/jericho-html-parser。我已成功将依赖项添加到project.clj
文件中,但我不知道如何require
它。
我尝试了(require '[zololabs.jericho-html-parser])
和众多变体,但似乎都没有。我已经查看了库的命名约定,我知道如何查看是否可以识别模式,但是我还没有成功。
根据文件名,Leiningen坐标或其他信息,是否可以直接告诉您如何require
图书馆?
答案 0 :(得分:3)
首先,你不是require
来自Clojure的Java库,你import
一个或多个Java类。例如:
(:import [net.htmlparser.jericho Source TextExtractor])
然后通过Java interop使用这些类。 e.g。
(Source. (java.net.URL. "https://yahoo.com"))
请注意,您不需要导入类路径中已有的Java类以便使用它们。你可以避免导入,如果你要使用它们一次或两次,只需用他们的完全限定名称来引用它们:
(net.htmlparser.jericho.Source. (java.net.URL. "https://www.yahoo.com"))
显然,您需要首先查找Java库API并了解其工作原理。在这种特殊情况下,请参阅here。
答案 1 :(得分:-3)
你刚刚发现了Clojure中的一个不一致之处。
简短的回答是您缺少冒号,这是源文件中使用的(ns ...)
表单所必需的:
(ns example
(:require [clojure.data.json :as json]))
请注意,由于ns
是一个宏,因此源文件版本在左方括号之前不需要单引号。
另一种情况是在REPL使用(require ...)
功能。在这种情况下,您需要语法:
> (require '[clojure.data.json :as json])
其中>
是REPL提示符。在这种情况下,您正在调用函数,因此require
之前没有冒号。但是,由于函数不是宏,因此您需要引用指定库名称及其别名的向量。