我是Clojure和Leiningen的新手,我已经确定我想要使用的一些内容位于clojure.contrib.generic.math-functions中。我在http://richhickey.github.com/clojure-contrib/branch-1.1.x/math-api.html找到了API信息,但我找不到任何可以帮助我弄清楚我应该把这个依赖项放在我的project.clj文件中的内容。
我尝试过[clojure.contrib.generic.math-functions "1.1"]
,[clojure.contrib.generic.math-functions "1.1.x"]
和[clojure.contrib.generic.math-functions "1.1.0"]
。对于每一个,我得到像......
...
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
----------
1) clojure.contrib.generic.math-functions:clojure.contrib.generic.math-functions:jar:1.1
答案 0 :(得分:11)
所有clojure-contrib名称空间都在一个jar文件中提供,其依赖关系必须列为:
[org.clojure/clojure-contrib "1.2.0"]
请注意,该工件有不同的版本。 1.2.0是目前的稳定版本。
为了在clojure代码中使用来自math-functions命名空间的函数,您需要require
或use
这样的命名空间,通常在ns
表单中完成源文件的开头:
(ns my.namespace
(:use [clojure.contrib.generic.math-functions]))
查看here,了解use
和require
之间的差异。
答案 1 :(得分:9)
Leiningen的下一个版本将完成此目的的搜索任务。它将搜索Clojars,Maven Central以及您的项目列出的任何其他存储库,前提是它们提供可下载的索引。它已经实现了,所以如果你从git运行Leiningen你可以使用它。
此外,Leiningen教程涵盖了这一点。输入“lein help tutorial”。
答案 2 :(得分:5)
您通常可以在clojars.org找到所需内容 - 它是leiningen的默认存储库。目前Clojure的稳定版本是1.2.0,所以你在leiningen project.clj
中有这个版本:
[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
要在您的clojure中使用通用数学函数,require
或use
在源文件顶部的名称空间声明中:
(ns your-namespace
(:use [clojure.contrib.generic.math-functions :as mathf]))
这允许您像这样引用该命名空间中的函数:
(mathf/abs -10) ;; => 10
:use
- 使用:as
的命名空间是在代码中使用其他命名空间中的函数的首选方法。 require
没问题,但您必须在函数前添加整个命名空间(例如clojure.contrib.generic.math-functions/abs
),这样才不实用。使用没有:as
的命名空间允许您使用这些函数而不使用任何前缀(例如abs
),但是您更有可能获得命名空间冲突,并且可能很难看到函数来自何处,特别是如果你:use
多个图书馆。
您可以通过查看http://clojars.org/repo/来浏览默认leiningen存储库中提供的所有库。当1.3.0结束时,clojure-contrib
的结构将发生变化,因此如果您使用的是1.3.0-alpha-xx版本,则必须包含特定的contrib库:
[org.clojure.contrib/generic "1.3.0-alpha4"]
答案 3 :(得分:2)
现在clojure.contrib已被拆分,数学函数就在math.numeric-tower中。 lein依赖关系指定如下:
[org.clojure/math.numeric-tower "0.0.1"]
您可以使用或要求合适,例如
(use '[clojure.math.numeric-tower])