2012-06-01 30 views
29

當我定義Clojure中一個私有函數,我通常使用一個-前綴作爲一個視覺指示器,該函數不能我的名字空間外使用,例如是否有命名私有函數的Clojure約定?

(defn- -name [] 
    (let [formatter (formatter "yyyy-MM-dd-HH-mm-ss-SSSS")] 
    (format "fixjure-%s" (unparse formatter (now))))) 

-前綴似乎使用gen-class時,也爲公共方法的約定。

是否有defn-「在Clojure的社區d功能的任何普遍接受的慣例,或者我應該只使用不帶前綴的名字呢?

似乎很多clojure.contrib中的代碼(可能會安靜地使用它)使用普通名稱作爲私有函數,所以也許這是最好的,但我真的很喜歡視覺指示器 - 也許我的C/Perl背景是太強大了! ;)

回答

40

這裏沒有一個慣例;視覺指示器在沒有內置私人功能概念的語言中普遍存在。由於Clojure的用defn-定義的函數在它們的命名空間之外是不可見的,所以不需要用uglifier作爲函數的前綴;)

所以你做什麼但是,但你可能應該像其他社區一樣做,只需說出他們的名字!它會讓你的生活更輕鬆。

+0

有道理。謝謝! –

23

我不知道任何的命名慣例,但你可以附加^:private元數據標籤定義私有函數。這完全等同於defn-,但稍微清晰一點,恕我直言。

(defn ^:private foo []) 
+1

併爲當前名稱空間執行此操作:'(def ^:private -ns- * ns *)' – nuaavee

相關問題