Modifier:
Quand je composais d'abord cette réponse, j'étais probablement un peu trop lourdement investi dans la question de « ce qui peut vous sortir avec? » En toute justice pour moi-même cependant, la question de l'admissibilité des mots-clés semble être encore en suspens. Alors:
D'abord, un peu de mots-clés, pour les nouveaux lecteurs:
- Mots-clés sont disponibles en deux saveurs, qualifiés et non qualifiés. Les mots clés non qualifiés, tels que
:foo
, n'ont aucun composant d'espace de noms. Les mots-clés qualifiés ressemblent à :foo/bar
où la partie précédant la barre oblique est l'espace de noms, ostensiblement. Les mots-clés ne peuvent pas être référencés et peuvent avoir un espace de noms inexistant, de sorte que leur comportement dans l'espace de noms est différent des autres objets Clojure.
- Les mots-clés peuvent être créés soit par des littéraux au lecteur, par exemple
:foo
, soit par la fonction keyword
, qui est (keyword name-str)
ou . Les mots-clés ne s'évaluent qu'à eux-mêmes, contrairement aux symboles qui pointent vers les vars. Notez que les mots-clés ne sont pas des symboles.
Qu'est-ce qui est officiellement autorisé?
Selon le code reader documentation, une seule barre oblique est autorisée, aucune période dans le nom et toutes les règles relatives aux symboles.
Qu'est-ce qui est réellement autorisé?
Plus ou moins, sauf les espaces semblent être autorisés dans le lecteur. Par exemple,
user> :-_./asdfgse/aser/se
:-_./asdfgse/aser/se
Semble être légal. L'espace de noms pour le mot-clé ci-dessus est:
user> (namespace :-_./asdfgse/aser/se)
"-_./asdfgse/aser"
Ainsi, l'espace de noms semble se composer de tout avant la dernière barre oblique.
La fonction keyword
est encore plus permissive:
user> (keyword "////+" "/////")
:////+//////
user> (namespace (keyword "////+" "/////"))
"////+"
Et De même, les espaces sont bien aussi si vous utilisez la fonction keyword
. Je ne suis pas sûr exactement quelles limitations sont placées sur les caractères Unicode, mais le REPL ne semble pas se plaindre quand je mets des caractères arbitraires.
Ce qui est susceptible de se produire à l'avenir:
Il y a eu quelques rumeurs au sujet de la validation des mots-clés comme ils sont internées. Supposément l'un des plus ouverts clojure tickets est concerné par la validation des mots-clés. Ainsi, la fonction de mot-clé peut cesser d'être si permissive dans le futur, bien que cela semble être dans l'air. Voir le billet assembla et google group discussion.
Intéressant. Ce que je veux vraiment faire, c'est utiliser des variables de chemin comme mots-clés. Et je ne veux même pas utiliser le ":". Et mes caractères variables de chemin sont limités à # "[A-Za-z0-9 -_ \ /]". Donc je pense que ça devrait aller dans ce cas. – Santosh
Je pense que la vraie réponse est de pointer vers [la documentation du lecteur] (http://clojure.org/reader), qui par exemple interdit clairement plusieurs barres obliques dans les mots-clés et les symboles. – kotarak
@kotarak: Il interdit clairement que dans le cas de symboles. Puisque les mots-clés ne sont pas des symboles, et toute la documentation dit que "les mots-clés sont comme des symboles", je dirais que c'est clair comme de la boue. –