在我的主命名空间中,我有一个名为“settings”的顶级var,它被初始化为空{}。从另一个clojure命名空间访问变量?
我 - 主FN设置使用DEF连接词设置和基于一些命令行参数(生产/开发不同的数据库主机等)中的内容。
我试图从另一个命名空间访问该地图的内容,拉出一些设置。当我试图用lein编译成uberjar时,我得到了一个回溯:“没有这样的var:lb/settings”。
我错过了什么?是否有一种更习惯于处理应用程序的宽泛设置的方式?像我这样在主域内使用“def”是否安全?或者我应该使用原子还是使用ref来使这个线程安全?
谢谢!
(ns com.domain.main
(:use com.domain.some-other-namespace.core)
(:gen-class))
(def settings {})
(defn -main [& args]
(with-command-line-args... ;set devel? based on args
(if (true? devel?)
(def settings (conj settings {:mongodb {:host "127.0.0.1"}
:memcached {:host "127.0.0.1"}}))
(def settings (conj settings {:mongodb {:host "PRODUCTION_IP"}
:memcached {:host "PRODUCTION_IP"}})))
;file2.clj
(ns com.domain.some-other-namespace.core
(:require [main :as lb]
...)
;configure MongoDB
(congo/mongo!
:db "dbname" :host (:host (mongodb lb/settings))))
...
所有的名称空间都有“。”在他们中。我为我的命名空间使用com.domain.module格式。为了简单起见,我放弃了它。在我开始尝试访问磅/设置之前它运行良好。 – erikcw 2011-01-06 04:41:11