Почему читатель 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}