Редактировать :
Когда я первоначально написал этот ответ, я, вероятно, был слишком сильно вложен в вопрос "с чем можно покончить?"Честно говоря, вопрос о допустимости ключевых слов еще не решен.Итак:
Сначала немного о ключевых словах для новых читателей:
- Ключевые слова бывают двух видов: квалифицированные и неквалифицированные.Неквалифицированные ключевые слова, такие как
:foo
, не имеют компонента пространства имен.Квалифицированные ключевые слова выглядят как :foo/bar
, где часть до косой черты является пространством имен, якобы.На ключевые слова нельзя ссылаться, и им может быть предоставлено несуществующее пространство имен, поэтому их поведение в пространстве имен отличается от других объектов Clojure. - Ключевые слова могут быть созданы литералами для читателя, например
:foo
,или с помощью функции keyword
, которая является (keyword <i>name-str</i>)
или (keyword <i>ns</i> <i>name</i>)
. - Ключевые слова оценивают только сами по себе, в отличие от символов, которые указывают на переменные.Обратите внимание, что ключевые слова не являются символами .
Что официально разрешено?
Согласно документации для считывателя допускается одиночная косая черта, в имени не должно быть точек и все правила, связанные с символами.
Что на самом деле разрешено?
Больше или меньше всего, кроме пробеловкажется, разрешено в читателе.Например,
user> :-_./asdfgse/aser/se
:-_./asdfgse/aser/se
Кажется законным.Пространство имен для указанного выше ключевого слова:
user> (namespace :-_./asdfgse/aser/se)
"-_./asdfgse/aser"
Таким образом, пространство имен состоит из всего, что было до последней косой черты.
Функция keyword
еще более разрешительна:
user> (keyword "////+" "/////")
:////+//////
user> (namespace (keyword "////+" "/////"))
"////+"
И точно так же пробелы тоже хороши, если вы используете функцию keyword
.Я не уверен, какие именно ограничения накладываются на символы Юникода, но REPL, похоже, не жалуется, когда я вводю произвольные символы.
Что может произойти в будущем:
Были некоторые грохоты о проверке ключевых слов во время их интернирования.Предположительно, один из самых длинных открытых clojure билетов связан с проверкой ключевых слов.Таким образом, функция ключевого слова может перестать быть настолько разрешающей в будущем, хотя, кажется, это в воздухе.См. Билет на ассемблере и обсуждение в группе Google .