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