2011-03-30 74 views
15

我發現有幾次我有一組相互關聯的函數,以及我如何自然地將它們放在文件中,最終與它們的依賴衝突(即函數1依賴於在功能2上,但在功能1上)。當我編寫代碼時,我通常會繼續評估頂級表達式,並且只會評估整個文件以刷新refs或whatnot的依賴關係。我經常發現,我最終會遇到依賴衝突,最終不得不圍繞一堆功能。解決clojure中「吊起」的問題

在我知道的其他語言中,只要你聲明瞭一個函數,它就會在幕後「懸掛」,就好像它出現在別的之前一樣。這樣你就不需要擔心代碼中事物的順序,並且可以把函數當作模塊化代碼。這是缺乏這種功能,使我一直陷入困境。難道我做錯了什麼?它更多的是一個小小的煩惱,然後是一筆鉅額的交易,這是你剛剛習慣於注意的事情嗎?

回答

22

declare解決了這個問題很好

declare 
macro 
Usage: (declare & names) 
defs the supplied var names with no bindings, useful for making forward declarations. 
Added in Clojure version 1.0 

就可以避免通過添加一個聲明語句命名空間

(declare fun1 fun2 fun3) 

(defn fun3 [] (fun1)) 
(defn fun1 [] (fun2)) 
(defn fun2 [] 42) 
+0

甜,感謝的開始雜耍的函數命令!正是我所尋找的 – 2011-03-30 18:58:26

+0

仍然有點毛病,但謝謝! – 2018-01-29 19:25:08