由 favila 发表的评论
啊,我想我明白了困惑的来源。EDN 和 clojure 读者规范都说类似于“关键字就像符号,除了以冒号开头”这样的东西。困惑在于我们是否将这个解释为意思
- 第一个字符是冒号,然后第二个字符及之后的字符与符号定义进行匹配。
- 第一个字符是冒号,那么整个形式都将与符号定义进行匹配。
CLJ-1003 CLJ-1252 和 CLJ-1286以及我自己似乎都理解第一种意思。这可能是当我们说“关键字的第一个字符”时,我们通常指的是冒号之后的第一个字符,就像冒号是“特殊的”而不是关键字的一部分(比如读者宏字符)。
然而,clojure 1.6似乎是遵循第二种含义(并解释了为什么:0/ a 是有效的但不能是:0/0),我不确定从引用的票据和谷歌群组讨论中看,这是否是因为下游破坏还是因为这真的是预期的解释,CLJ-1252的补丁被Alex Miller错误地接受了。
注意如果接受第二种解释,则clojure读者文档中的限制“一个符号可以包含一个或多个非重复冒号”对于关键字是不正确的。(EDN似乎不允许命名空间扩展的关键字,因此这不是问题。)
此外,EDN允许符号中连续出现冒号,而clojure 1.6以及读者规范则不允许。