Clojure名称空间

Fed*_*sak 3 clojure

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

一:

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

(def status "WORKING")
Run Code Online (Sandbox Code Playgroud)

二:

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

(defn show [] (println status))
Run Code Online (Sandbox Code Playgroud)

结果:例外.

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

kot*_*rak 12

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

如果您只想将一个名称空间拆分为多个文件,这也是可能的.

名称/ space.clj:

(ns name.space)

(declare status)

(load "space_one")
(load "space_two")
Run Code Online (Sandbox Code Playgroud)

名称/ space_one.clj:

(in-ns 'name.space)
(defn show [] (println status))
Run Code Online (Sandbox Code Playgroud)

名称/ space_two.clj:

(in-ns 'name.space)
(def status "WORKING")
Run Code Online (Sandbox Code Playgroud)

  • @ stuart-sierra我说的不一样了吗? (4认同)

pon*_*zao 6

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