Voici la Clojure de la documentation pour les mots clés et les Symboles.
Les mots clés sont symboliques des identificateurs d'évaluer eux-mêmes. Ils fournissent très rapide tests d'égalité...
Les symboles sont des identifiants qui sont normalement utilisés pour se référer à quelque chose d'autre. Ils peuvent être utilisés dans les formulaires du programme à consulter les paramètres de la fonction, laissez-les liaisons, les noms de classe et les variables globales...
Les mots clés sont généralement utilisés comme léger "chaines", par exemple pour les touches d'un hachage de la carte ou de l'envoi des valeurs de multimethod. Les symboles sont généralement utilisés pour nommer les variables et de fonctions, et il est moins fréquent de les manipuler comme des objets directement à l'exception des macros et autres. Mais il n'y a rien qui vous empêche d'utiliser un symbole partout où vous utilisez un mot-clé (si vous n'avez pas l'esprit en citant tout le temps).
Le moyen le plus facile de voir la différence, c'est de lire Keyword.java
et Symbol.java
dans le Clojure source. Il y a quelques différences d'implémentation. Par exemple, un Symbole en Clojure peut avoir des métadonnées et un mot-Clé ne peut pas.
En plus de célibataires à deux points de syntaxe, vous pouvez utiliser un double deux-points pour faire un espace de noms qualifiés mot-clé.
user> :foo
:foo
user> ::foo
:user/foo
Common Lisp a des mots-clés, comme le Rubis et d'autres langues. Elles sont légèrement différentes dans ces deux langues, bien sûr. Quelques différences entre la Common Lisp mots-clés et Clojure mots-clés:
-
Mots clés en Clojure ne sont pas des Symboles.
user> (symbol? :foo)
false
-
Mots-clés n'appartiennent à aucun espace de noms, sauf si vous précisément les qualifier:
user> (namespace :foo)
nil
user> (namespace ::foo)
"user"
(Merci Rainer Joswig pour me donner des idées de choses à regarder.)