1

来自读者文档

关键字就像符号,除了:

它们可以而且必须以冒号开头,例如: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)

我不能在包含冒号的关键字之后立即在哈希图文字的中间放置换行符。

我可以对其他关键字执行此操作。这工作正常。

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

为什么?这只是读者的怪癖吗?AFAICT:my:keyword是语法上有效的关键字。我应该担心其他不一致吗?

我在用着

REPL-y 0.3.5,
nREPL 0.2.6
Clojure 1.6.0
4

1 回答 1

0

正如您的最后一个示例所代表的那样,您还没有完成地图,所以我希望它会抛出一个异常,其中包含任何值:my:keyword。这对我有用。

{
 :my:keyword 1
 }
=> {:my:keyword 1}
于 2015-06-15T19:59:39.777 回答