由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和阅读器规范则不允许。