评论者: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 和读者规范则不允许。