为什么Clojure读者会对包含冒号的关键字感到困惑?

时间:2015-06-15 09:21:49

标签: clojure clojure-repl

来自reader docs

  

关键字就像符号一样,除了:

     

他们可以而且必须以冒号开头,例如:fred的

     

他们不能包含'。'或命名类。

     

以两个冒号开头的关键字在当前命名空间中解析

  

符号可以包含一个或多个非重复的':

因此,文档似乎应明确允许this作为关键字。

这适用于我的REPL:

:my:keyword

这有效:

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)

为什么呢?这只是读者的怪癖吗? AFAICT user=> { #_=> :one #_=> 1 #_=> } {:one 1} 是一个语法上有效的关键字。我应该担心其他不一致吗?

我正在使用

:my:keyword

1 个答案:

答案 0 :(得分:0)

正如你的最后一个例子所示,你还没有完成地图,所以我希望它会抛出:my:keyword所有值的异常。这对我有用。

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