Clojure пространства имен - PullRequest
3 голосов
/ 24 мая 2011

Я хочу разбить большой clojure-скрипт на более мелкие.И это выглядит так:

Один:

(ns one
  (:use [two :only (show)]))

(def status "WORKING")

Два:

(ns two
  (:use [one :only (status)]))

(defn show [] (println status))

Результат: Исключение .

PS Я понимаю, что происходит какое-то рекурсивное конструирование пространства имен.Я знаю только небрежное половинное решение, такое как определение без тела до со ссылкой на пространства имен?Есть предложения?

Ответы [ 2 ]

12 голосов
/ 24 мая 2011

+ 1 за ответ Понзао.Чтобы уточнить немного: циклические зависимости пространств имен часто являются признаком того, что вы не правильно поняли свои абстракции и / или API.Либо вы «смешиваете» слои, либо вещи должны находиться в одном пространстве имен, потому что они действительно принадлежат друг другу.

Если вы хотите просто разделить одно пространство имен на несколько файлов, это также возможно.

name / space.clj:

(ns name.space)

(declare status)

(load "space_one")
(load "space_two")

name / space_one.clj:

(in-ns 'name.space)
(defn show [] (println status))

name / space_two.clj:

(in-ns 'name.space)
(def status "WORKING")
6 голосов
/ 24 мая 2011

Вы строите циклическую зависимость между двумя компонентами, вы уверены, что это то, что вы хотите?Почему бы не иметь третьего пространства имен, содержащего их общие функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...