【发布时间】:2016-01-04 15:10:32
【问题描述】:
我的项目结构简单如下:
|- 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 的新手)。
【问题讨论】:
-
为什么
core需要其他命名空间? -
core从 clojure "template" 生成 xml,并具有接收模板名称作为参数的-main函数,例如"name-dialog" 并从中生成 xml -
(defn state [s & xs] (hash-map :tag :state :attrs {:name s} :content (if xs (vec xs) nil)))
-
听起来
core中依赖于其他命名空间的函数应该移到这些命名空间中。core命名空间不需要依赖其他模块。 -
谢谢,我会试着移动它们,这很合乎逻辑。但是在
core我有接收对话框名称的函数,例如dialog_name,并生成 xml,所以无论如何都应该作为模块加载? (defn -main [dialog] (emit (eval (symbol dialog)))))