Comment made by: 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和读取器规范不允许。