Editar:
Al principio, cuando compuse esta respuesta, que fue probablemente un poco demasiado invertido en la cuestión de "qué se puede conseguir lejos con?" Para ser justos conmigo mismo, la cuestión de la admisibilidad de la palabra clave parece estar todavía sin resolver. Por lo tanto:
En primer lugar, un poco de palabras clave, para los nuevos lectores:
- Palabras clave vienen en dos sabores, cualificados y no cualificados. Las palabras clave no calificadas, como
:foo
, no tienen componente de espacio de nombres. Las palabras clave calificadas se parecen a :foo/bar
donde la parte anterior a la barra es el espacio de nombre, ostensiblemente. No se puede hacer referencia a las palabras clave y se les puede dar un espacio de nombres inexistente, por lo que su comportamiento del espacio de nombres es diferente de otros objetos de Clojure.
- Las palabras clave se pueden crear por literales para el lector, como
:foo
, o por la función keyword
, que es (keyword name-str)
o (keyword nsname)
.
- Las palabras clave se evalúan solo a sí mismas, a diferencia de los símbolos que apuntan a vars. Tenga en cuenta que las palabras clave no son símbolos.
¿Qué está oficialmente permitido?
De acuerdo con reader documentation, se permite una sola barra, no hay puntos en el nombre, y todas las reglas que hacer con los símbolos.
¿Qué está realmente permitido?
Más o menos todo menos espacios parecen estar permitidos en el lector. Por ejemplo,
user> :-_./asdfgse/aser/se
:-_./asdfgse/aser/se
Parece ser legal. El espacio de nombres para la palabra clave anterior es:
user> (namespace :-_./asdfgse/aser/se)
"-_./asdfgse/aser"
lo tanto, el espacio de nombres parece consistir en todo antes de la última barra inclinada.
La función keyword
es aún más permisiva:
user> (keyword "////+" "/////")
:////+//////
user> (namespace (keyword "////+" "/////"))
"////+"
Y del mismo modo, los espacios son muy bien también si se utiliza la función keyword
. No estoy seguro de qué limitaciones se aplican a los caracteres Unicode, pero el REPL no parece quejarse cuando ingreso caracteres arbitrarios.
Qué es probable que suceda en el futuro:
Ha habido algunos rumores sobre las palabras clave de validación, ya que están internados. Supuestamente uno de los abiertos más largos clojure tickets se refiere a la validación de palabras clave. Entonces, la función de palabra clave puede dejar de ser tan permisiva en el futuro, aunque parezca estar en el aire. Vea el ticket de montaje y google group discussion.
Interesante. Lo que realmente quiero hacer es usar variables de ruta como palabras clave. Y ni siquiera quiero usar el ":". Y mis caracteres variables de ruta están restringidos a # "[A-Za-z0-9 -_ \ /]". Entonces creo que debería estar bien en ese caso. – Santosh
Creo que la verdadera respuesta es apuntar a [la documentación del lector] (http://clojure.org/reader), que, por ejemplo, prohíbe claramente varias barras en palabras clave y símbolos. – kotarak
@kotarak: claramente lo prohíbe en el caso de los símbolos. Dado que las palabras clave no son símbolos, y toda la documentación dice que "las palabras clave son como símbolos", diría que es claro como el barro. –