Clojure名称空间

时间:2011-05-24 08:53:37

标签: clojure

我想把一个大的clojure脚本分成小的。它看起来像这样。

一:

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

(def status "WORKING")

二:

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

(defn show [] (println status))

结果:例外

PS 我知道有些类型的递归命名空间构造会发生。我知道只有一个草率的半解决方案,比如定义 没有正文 之前引用名称空间?有什么建议吗?

2 个答案:

答案 0 :(得分:12)

+1为ponzao的答案。详细说明:命名空间的循环依赖性通常是一个标志,您没有得到正确的抽象和/或API。要么“混合”图层,要么只是在一个名称空间中,因为它们真的属于一个。

如果您想将一个名称空间拆分为多个文件,也可以这样做。

名称/ space.clj:

(ns name.space)

(declare status)

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

名称/ space_one.clj:

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

名称/ space_two.clj:

(in-ns 'name.space)
(def status "WORKING")

答案 1 :(得分:6)

您正在构建两个组件之间的循环依赖关系,您确定这是您想要的吗?为什么没有包含其常用函数的第三个命名空间?