Где найти действительные номера версий для зависимостей в Leiningen

Я новичок в Clojure и Leiningen, и я решил, что часть того, что я хочу использовать, находится в clojure.contrib.generic.math-functions. Я нашел информацию API для этого http://richhickey.github.com/clojure-contrib/branch-1.1.x/math-api.html, но я не могу найти ничего, что помогло бы мне разобраться, что я должен внести в свой проект. 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

Ответы

Ответ 1

Все пространства имен clojure -contrib отправляются в один файл jar, для которого должна быть указана зависимость:

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

Обратите внимание, что существуют разные версии этого артефакта. 1.2.0 является текущим стабильным выпуском.

Чтобы использовать функции, идущие из пространства имен математических функций в вашем коде clojure, вам нужно либо require, либо use такое пространство имен, обычно выполняемое в форме ns в начале исходного файла:

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

Посмотрите здесь, чтобы увидеть различия между use и require.

Ответ 2

В следующей версии Leiningen будет задача поиска именно для этой цели. Он будет искать Clojars, Maven Central и любые другие репозитории, перечисленные в вашем проекте, если они предлагают загружаемые индексы. Он уже реализован, поэтому, если вы запустите Leiningen из git, вы можете его использовать.

Кроме того, в учебнике Leiningen рассказывается об этом. Введите "учебное пособие по lein help".

Ответ 3

Обычно вы можете найти то, что вам нужно в 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 много библиотек.

Вы можете просмотреть все библиотеки, доступные из репозитория leining по умолчанию, выбрав http://clojars.org/repo/. Структура clojure-contrib изменится, когда отсутствует 1.3.0, поэтому вам придется включить конкретную библиотеку Contrib, если вы используете версию 1.3.0-alpha-xx:

[org.clojure.contrib/generic "1.3.0-alpha4"]

Ответ 4

Теперь, когда clojure.contrib был разбит, математические функции находятся в том, что называется math.numeric-tower. Зависимость lein определяется следующим образом:

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

Вы можете использовать или требовать, как кажется подходящим, например

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