2013-02-12 84 views
4

在我的clojure文件的頭部,我有一系列的defs,其中一些只是墊腳石,即不意味着被使用進一步放下文件。即Clojure系列的defs,但不暴露在外部範圍全部

def src-folder (File. "src") 
def lib-folder (File. src-folder "lib") 
def dist-folder (File. src-folder "bin") 
;; I only care for the lib-folder and dist-folder beyond this point 

在Clojure中做到這一點的正確方法是什麼?

回答

5

使用let而不是def第一個扔掉的定義,窩let內剩餘def電話:

(let [root-dir (File. "projects/my-project") 
     src-folder (File. root-dir "src")] 
    (def lib-folder (File. src-folder "lib")) 
    (def dist-folder (File. src-folder "bin"))) 

的價值src-folder本地綁定的let之後被丟棄評估,留下只有lib-folderdist-folder變量可供程序的其餘部分訪問。

+0

你能有一個以上的地方,被扔掉的讓利形式的[]內結合?也許不止一個需要被丟棄,不一定是第一個...... – 2013-02-12 19:29:38

+0

是的,你可以擁有儘可能多的你喜歡的,並且它們被評估爲系列,所以後面的綁定可以在同一個'let'內引用先前的綁定。修改示例以顯示此內容。 – Alex 2013-02-12 19:30:59

4

如果它們是defn s(即函數),您可以簡單地使用defn-來創建一個私有函數。

對於def是你必須明確地將它們設置爲私有:

(def ^:private src-folder (File. "src"))