Clojure 中的循环加载依赖
Cyclic load dependency in Clojure
我的项目结构简单如下:
|- 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
将 dialogs
所需的 core
模块部分提取到单独的共享模块中:
shared (depends on "nothing")
core -> dialogs -> shared
core -> shared (possibly)
对我来说,循环依赖是设计有问题的标志。即使解决了技术问题(加载时序或编译等),循环依赖通常是紧耦合的标志,仍然值得修复。
我的项目结构简单如下:
|- 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
将 dialogs
所需的 core
模块部分提取到单独的共享模块中:
shared (depends on "nothing")
core -> dialogs -> shared
core -> shared (possibly)
对我来说,循环依赖是设计有问题的标志。即使解决了技术问题(加载时序或编译等),循环依赖通常是紧耦合的标志,仍然值得修复。