Почему читатель Clojure путается с ключевыми словами, содержащими двоеточия?

Из документов читателя:

Ключевые слова похожи на символы, кроме:

Они могут и должны начинаться с двоеточия, например:fred.

Они не могут содержать "." или назвать классы.

Ключевое слово, которое начинается с двух двоеточий, разрешается в текущем пространстве имен

а также

Символ может содержать один или несколько неповторяющихся символов ':'.

Похоже, документы должны явно разрешать :my:keyword в качестве ключевого слова.

Это работает в моем REPL:

user=> {:my:keyword 1}
{:my:keyword 1}

и это работает:

user=> {:mykeyword
  #_=> 1}
{:mykeyword 1}

и даже это работает

=> (clojure.edn/read-string (pr-str {:my:keyword 1}))
{:my:keyword 1}

Но это не так:

user=> {
  #_=> :my:keyword

RuntimeException EOF while reading, starting at line 1
clojure.lang.Util.runtimeException (Util.java:221)

Я не могу поместить новую строку в середину литерала hashmap сразу после ключевого слова, содержащего двоеточие.

Я могу сделать это для других ключевых слов. Это работает хорошо.

user=> {
  #_=> :one
  #_=> 1
  #_=> }
{:one 1}

Зачем? Это просто причуда читателя? AFAICT :my:keyword является синтаксически допустимым ключевым словом. Должен ли я беспокоиться о других несоответствиях?

я использую

REPL-y 0.3.5,
nREPL 0.2.6
Clojure 1.6.0

1 ответ

Как показывает ваш последний пример, вы еще не завершили карту, поэтому я ожидаю, что она выдаст исключение с любым значением, где :my:keyword является. Это работает для меня.

{
 :my:keyword 1
 }
=> {:my:keyword 1}
Другие вопросы по тегам