Дополнительные исходные файлы проекта Clojure

Когда лейн настраивает проект, создается файл core.clj вместе с другими каталогами и файлами. Я хочу знать, могу ли я разделить содержимое core.clj на другой исходный файл под

../myproj/src/myproj/

и если да, то как получить доступ к этим данным из core.clj.


person octopusgrabbus    schedule 07.11.2012    source источник


Ответы (3)


IIRC (у меня нет удобного проекта, чтобы проверить), все в вашем каталоге src/myproj/ находится в пространстве имен 'myproj. Таким образом, ваш файл core.clj будет находиться в пространстве имен 'myproj.core. Другие файлы будут находиться в своих собственных пространствах имен в пространстве имен 'myproj (например, 'myproj.other-file для other_file.clj), и их можно будет втянуть в core.clj, выполнив:

(use 'myproj.other-file)

или, в объявлении ns:

(ns myproj.core
  (:use [myproj.other-file]))
person paul    schedule 07.11.2012

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

См. http://clojure.org/libs, чтобы узнать, как давать имена и загружать файлы и пространства имен. Следует иметь в виду, что тире в пространствах имен преобразуются в символы подчеркивания в именах файлов.

person Joost Diepenmaat    schedule 07.11.2012
comment
Спасибо. Я отказываюсь от тире в пространствах имен. У меня было слишком много проблем с ними. - person octopusgrabbus; 07.11.2012

project.clj от Leiningen определяет переменную project, которая представляет собой не что иное, как карту с ключами, обозначающими параметры проекта (в Clojure идиомой является использование def[name] для создания переменной с именем [name], которое обычно представляет собой карту — самую простую, но очень полезную структуру данных).

См. значения по умолчанию. var в исходном коде Leiningen 2 для значений по умолчанию.

С учетом сказанного, прежде чем вызывать defproject, вы можете делать в файле project.clj все, что хотите — в конце концов, это сценарий Clojure, и ваше воображение (и знакомство с Clojure) — это единственное, что может вас ограничивать. На самом деле, вы можете делать с переменной var все, что захотите, после ее создания. Думайте о project.clj как о приложении Clojure для управления вашим проектом.

Например, до того, как в Leiningen 2 были введены профили, существовала «уловка» — иметь одну переменную с общими зависимостями для атрибутов :dependencies и :dev-dependencies. Просто предупреждаю вас еще раз - в Leiningen 2 в этом больше нет необходимости, поскольку он предлагает возможность профиля. Прочтите статью Тестирование вашего проекта на нескольких версии Clojure, если вам интересно, как это было в прошлом.

person Jacek Laskowski    schedule 08.11.2012