Где найти действительные номера версий для зависимостей в 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])