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