2013-06-30 37 views
2

我想在clojure中做出小的web框架。我在/ handlers目錄中有一堆clojure文件,我想在我的項目的.core命名空間中要求所有這些文件。每個文件都定義了自己的名稱空間。例如:project.handlers.home。這個背後的想法是當我添加新的處理程序時,我不想修改核心文件中的名稱空間聲明來包含它。我想出的唯一解決方案是查找目錄中的所有文件並使用clojure.core/load加載它們,但它遠非美麗而慣用。有沒有一種慣用的方式來做到這一點?Clojure自動需要文件

+0

嘗試過了嗎? –

+0

無非是遍歷目錄和做(clojure.core /加載「文件」)。 – ivs

+0

你應該真的在這個問題上表現出一些努力,你確實嘗試了一些東西,以及你在哪裏被困住。通常你會顯示一些代碼。 * downvote *箭頭說:「這個問題沒有顯示任何研究工作;它不清楚或沒有用」。如果你這樣做,我相信你會得到答案。 –

回答

7

有沒有一種慣用的方法來做到這一點?

IMO,no。 Clojure中的習慣用語通常贊成明確表達「做魔術」,特別是在命名全局對象時(自動加載名稱空間顯然是這樣)。

我不知道爲什麼你不想在添加新的處理程序時修改你的「核心」文件,但是你可能會考慮引入一個額外的名字空間來加載「核心」和你的處理程序並將它們連接在一起。

+0

謝謝你的回答。 – ivs

1

Noir包括some functionality像這樣,使它成爲一個明確的API調用來加載特定目錄下的命名空間。有關此示例,請參閱load-views。它用它來自動加載路徑。但是,Noir方法由於所涉及的魔法數量以及該方法的其他複雜性(例如滯留路徑定義)而沒有感覺到習慣用法。

如果您需要從工具,框架或庫的角度查找命名空間,我會使用find-namespaces in tools.namespace然後需要/加載它們。這種方法在提供用戶級可插入性方面很有用,用戶可以將一個處理程序放到一個目錄中,然後在代碼中看到新的選項,儘管顯式的清晰度往往更爲明顯。

+0

好點。謝謝。 – ivs