Какие символы разрешены в ключевом слове Clojure? - PullRequest
14 голосов
/ 17 октября 2010

Я ищу список разрешенных символов в ключевом слове clojure. В частности, мне интересно знать, разрешены ли какие-либо из следующих символов: - _ /.

Я не программист java, поэтому я бы не знал о возможных последствиях, если они есть. Я не знаю, сопоставлено ли ключевое слово clojure с ключевым словом java, если такое есть.

Ответы [ 4 ]

16 голосов
/ 17 октября 2010

Редактировать :

Когда я первоначально написал этот ответ, я, вероятно, был слишком сильно вложен в вопрос "с чем можно покончить?"Честно говоря, вопрос о допустимости ключевых слов еще не решен.Итак:

Сначала немного о ключевых словах для новых читателей:

  • Ключевые слова бывают двух видов: квалифицированные и неквалифицированные.Неквалифицированные ключевые слова, такие как :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 .

6 голосов
/ 18 октября 2010

«Правильный» ответ: задокументировано :

Символы начинаются с нецифровых символов и могут содержать буквенно-цифровые символы и *, +,!, -, _ и? (другие символы будут разрешены в конце концов, но не все макро-символы были определены). «/» имеет особое значение, его можно использовать один раз в середине символа для отделения пространства имен от имени, например, мои-имена / Foo. «/» само по себе называет функцию деления. '' имеет особое значение - его можно использовать один или несколько раз в середине символа для обозначения полного имени класса, например, java.util.BitSet, или в именах пространства имен. Символы, начинающиеся или заканчивающиеся на «.» Зарезервированы Clojure. Символы, содержащие / или. называются «квалифицированными». Символы, начинающиеся или заканчивающиеся на «:», зарезервированы Clojure. Символ может содержать один или несколько неповторяющихся символов ':'.

Редактировать: и далее по ключевым словам:

Ключевые слова похожи на символы, кроме:
* Они могут и должны начинаться с двоеточия, например :. * Фреда 1013 * * Они не могут содержать «.» или назовите классы.
* Ключевое слово, которое начинается с двух двоеточий, разрешается в текущем пространстве имен

4 голосов
/ 19 октября 2010

начиная с версии 1.3, вы можете использовать ' везде, где не начинается ключевое слово.поэтому :arthur's-keyword теперь разрешено:)

Я использую ключевые слова :-P и :-D, чтобы время от времени оживлять мой код (как синонимы для истинных и ложных)

4 голосов
/ 17 октября 2010

Из этого списка читатель, безусловно, разрешает - и _, но / имеет особое значение в качестве разделителя между пространствами имен и именами символов.Точка (о которой вы не спрашивали) также проблематична в именах символов, поскольку она используется в полных именах классов Java.

Что касается идиомы Clojure, - ваш лучший друг в символеимена.Он занимает место верблюжьего падежа в Java или подчеркивания в Ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...