14

我是 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
4

4 回答 4

11

所有 clojure-contrib 命名空间都包含在一个 jar 文件中,其依赖项必须列出如下:

[org.clojure/clojure-contrib "1.2.0"]

请注意,该工件有不同的可用版本。1.2.0 是当前的稳定版本。

为了在你的 clojure 代码中使用来自 math-functions 命名空间的函数,你需要一个requireuse这样的命名空间,通常在ns源文件开头的表单中完成:

(ns my.namespace
    (:use [clojure.contrib.generic.math-functions]))

看看这里use,看看和之间的区别require

于 2011-05-06T22:00:58.947 回答
9

下一个版本的 Leiningen 将为此目的进行搜索任务。它将搜索 Clojars、Maven Central 和您的项目列出的任何其他存储库,前提是它们提供可下载的索引。它已经实现了,所以如果你从 git 运行 Leiningen,你就可以使用它。

此外,Leiningen 教程涵盖了这一点。输入“lein 帮助教程”。

于 2011-05-07T00:27:19.180 回答
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-ing namespaces with:as是在代码中使用来自其他命名空间的函数的首选方式。require没关系,但你必须在你的函数前面加上整个命名空间(例如clojure.contrib.generic.math-functions/abs),所以这是不切实际的。使用没有命名空间的命名空间:as允许您在完全没有任何前缀的情况下使用这些函数(例如abs),但是您更有可能遇到命名空间冲突,并且可能难以查看函数的来源,尤其是在您:use有很多库的情况下。

您可以通过查看http://clojars.org/repo/来浏览默认 leiningen 存储库中所有可用的库。的结构clojure-contrib会在 1.3.0 发布后发生变化,因此如果您使用的是 1.3.0-alpha-xx 版本,则必须包含特定的 contrib 库:

[org.clojure.contrib/generic "1.3.0-alpha4"]
于 2011-05-06T22:05:45.360 回答
2

现在 clojure.contrib 已被分解,数学函数位于名为 math.numeric-tower 的东西中。lein 依赖项是这样指定的:

[org.clojure/math.numeric-tower "0.0.1"]

您可以根据需要使用或要求,例如

(use '[clojure.math.numeric-tower])

于 2012-02-27T18:30:41.723 回答