2012-06-01 11 views
29

Quando definisco una funzione privata in Clojure, di solito uso un prefisso - come indicatore visivo che la funzione non può essere utilizzata al di fuori del mio spazio dei nomi, ad es.Esiste una convenzione Clojure per denominare funzioni private?

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

Ma il prefisso - sembra essere anche una convenzione per i metodi pubblici quando si utilizza gen-class.

Esiste una convenzione generalmente accettata per le funzioni di defn- nella comunità di Clojure o devo semplicemente utilizzare nomi non prefissati?

Sembra che un sacco di codice in clojure.contrib (che possa riposare in pace) utilizza i nomi normali per funzioni private, quindi forse è meglio, ma mi piace molto l'indicatore visivo - forse il mio C/Perl sfondo è semplicemente troppo forte! ;)

risposta

40

Non c'è una convenzione; l'indicatore visivo è prevalente nelle lingue senza nozione incorporata di funzioni private. Poiché le funzioni di Clojure definite con defn- non sono visibili al di fuori del loro spazio dei nomi, non è necessario prefissare funzioni con un ugolatore;)

Quindi, fai ciò che vuoi ma, ma probabilmente dovresti semplicemente fare come fa il resto della community e basta nominarli normalmente! Ti renderà la vita più facile.

+0

Ha senso. Grazie! –

23

Non sono a conoscenza di alcuna convenzione di denominazione ma è possibile allegare il tag di metadati ^:private per la definizione di funzioni private. Questo è esattamente equivalente a defn-, ma è un po 'più chiaro, IMHO.

(defn ^:private foo []) 
+1

E per fare ciò per lo spazio dei nomi corrente: '(def ^: private -ns- * ns *)' – nuaavee

Problemi correlati