Edit:
Quando inizialmente ho composto questa risposta, mi era probabilmente un po 'troppo pesantemente investito nella questione del "che cosa si può farla franca?" Tuttavia, a mio parere, la questione relativa all'ammissibilità delle parole chiave sembra ancora instabile. Quindi:
In primo luogo, un po 'di parole chiave, per i nuovi lettori:
- Parole sono disponibili in due versioni, qualificate e non qualificate. Le parole chiave non qualificate, come
:foo
, non hanno alcun componente dello spazio dei nomi. Le parole chiave qualificate sembrano :foo/bar
dove la parte precedente alla barra è lo spazio dei nomi, apparentemente. Le parole chiave non possono essere riferite e possono essere assegnate a uno spazio dei nomi inesistente, quindi il loro comportamento nello spazio dei nomi è diverso dagli altri oggetti Clojure.
- Le parole chiave possono essere create da letterali al lettore, come
:foo
, o dalla funzione keyword
, che è (keyword name-str)
o (keyword nsname)
.
- Le parole chiave si valutano solo, a differenza dei simboli che puntano a vars. Le parole chiave non sono simboli.
Cosa è ufficialmente consentito?
In base allo reader documentation è consentita una singola barra, non ci sono periodi nel nome e tutte le regole relative ai simboli.
Che cosa è effettivamente consentito?
Più o meno nulla, ma gli spazi sembrano essere consentiti nel lettore. Ad esempio,
user> :-_./asdfgse/aser/se
:-_./asdfgse/aser/se
Appare legale. Lo spazio dei nomi per la suddetta parola chiave è:
user> (namespace :-_./asdfgse/aser/se)
"-_./asdfgse/aser"
Quindi lo spazio dei nomi sembra consistere di tutto prima dell'ultima barra.
La funzione keyword
è ancora più permissiva:
user> (keyword "////+" "/////")
:////+//////
user> (namespace (keyword "////+" "/////"))
"////+"
E allo stesso modo, gli spazi vanno bene anche se si utilizza la funzione keyword
. Non sono sicuro di quali siano le limitazioni poste sui caratteri Unicode, ma il REPL non sembra lamentarsi quando inserisco caratteri arbitrari.
Che cosa è probabile che accada in futuro:
Ci sono state alcune avvisaglie circa la convalida parole chiave come sono internati. Presumibilmente uno dei più aperti clojure tickets riguarda la convalida delle parole chiave. Quindi la funzione delle parole chiave potrebbe smettere di essere così permissiva in futuro, anche se sembra essere nell'aria. Vedi il ticket dell'assembla e google group discussion.
Interessante. Quello che voglio veramente fare è usare le variabili di percorso come parole chiave. E non voglio neanche usare ":". E i miei caratteri variabili di percorso sono limitati a # "[A-Za-z0-9 -_ \ /]". Quindi penso che dovrebbe essere ok in quel caso. – Santosh
Penso che la vera risposta sia quella di puntare a [la documentazione del lettore] (http://clojure.org/reader), che ad esempio proibisce chiaramente diverse barre nelle parole chiave e nei simboli. – kotarak
@kotarak: Proibisce chiaramente che nel caso dei simboli. Dal momento che le parole chiave non sono simboli, e tutta la documentazione dice che "le parole chiave sono come simboli", direi che è chiaro come il fango. –