在我的主命名空間中,我有一個名爲「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