2012-06-01 20 views
29

Kiedy definiuję prywatną funkcję w Clojure, zwykle używam prefiksu - jako wizualnego wskaźnika, że ​​funkcja nie może być używana poza moją przestrzenią nazw, np.Czy istnieje konwencja Clojure do nazywania prywatnych funkcji?

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

Ale przedrostek - wydaje się być również konwencja metod publicznych przy użyciu gen-class.

Czy istnieje ogólnie akceptowana konwencja dla funkcji defn- "w społeczności Clojure, czy też powinienem po prostu używać nazw nieprefiksowanych?

Wygląda na to, że wiele kodu w clojure.contrib (może spoczywać w spokoju) używa normalnych nazw dla prywatnych funkcji, więc może to jest najlepsze, ale bardzo podoba mi się wizualny wskaźnik - może moje tło C/Perl jest po prostu zbyt silny! ;)

Odpowiedz

40

Nie ma konwencji; Wskaźnik wizualny jest powszechny w językach bez wbudowanego pojęcia funkcji prywatnych. Ponieważ funkcje Clojure zdefiniowane jako defn- nie są widoczne poza ich przestrzenią nazw, nie ma potrzeby przedrostowania funkcji za pomocą wulgmastera;)

Zrób to, co ty, ale prawdopodobnie powinieneś po prostu robić to, co robi reszta społeczności i po prostu nazwij je normalnie! Ułatwi ci to życie.

+0

Ma sens. Dzięki! –

23

Nie jestem świadomy żadnych konwencji nazewnictwa, ale można dołączyć znacznik metadanych ^:private do definiowania prywatnych funkcji. Jest to dokładnie równoważne z defn-, ale jest nieco jaśniejsze, IMHO.

(defn ^:private foo []) 
+1

I zrobić to dla bieżącego obszaru nazw: '(def ^: private -ns- * ns *)' – nuaavee

Powiązane problemy