我想把一个大的clojure脚本分成小的。它看起来像这样。
一:
(ns one
(:use [two :only (show)]))
(def status "WORKING")
二:
(ns two
(:use [one :only (status)]))
(defn show [] (println status))
结果:例外。
PS 我知道有些类型的递归命名空间构造会发生。我知道只有一个草率的半解决方案,比如定义 没有正文 之前引用名称空间?有什么建议吗?
答案 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)
您正在构建两个组件之间的循环依赖关系,您确定这是您想要的吗?为什么没有包含其常用函数的第三个命名空间?