我的项目有一个简单的结构如下:
|- core.clj
|- dialogs.clj
|- dialogs/
|- name_dialog.clj
name_dialog
依赖于core
,而core
需要name_dialog
。
所以我有这样的依赖项:
core.clj
(ns ddsl.core
(:gen-class)
(:require [clojure.xml :refer :all]
[ddsl.dialogs :refer :all]))
dialogs.clj
(ns ddsl.dialogs
(:require [ddsl.core :refer :all]))
(load "dialogs/name_dialog")
name_dialog.clj
(in-ns 'ddsl.dialogs)
当我尝试运行程序时,我得到以下错误Cyclic load dependency: [ /ddsl/core ]->/ddsl/dialogs->[ /ddsl/core ]
请让我知道,如何重组我的项目(我是Clojure的新手)。
与Clojure无关的经典答案可能是检查模块及其职责。
(->
代表"depends on")
:
core -> dialogs -> core
将core
模块中dialogs
需要的部分提取到一个单独的共享模块中:
shared (depends on "nothing")
core -> dialogs -> shared
core -> shared (possibly)
对我来说,循环依赖关系是设计错误的指示。即使解决了技术问题(通过加载时间序列或编译等),循环依赖通常是紧耦合的标志,仍然值得修复。